“线程中的异常”;“主要”;java.lang.ArrayIndexOutofBounds异常:7

“线程中的异常”;“主要”;java.lang.ArrayIndexOutofBounds异常:7,java,Java,我用JAVA编写了这段代码,每次尝试执行它时,都会出现运行时错误,如下所示: 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:7 位于Solution.main(Solution.java:26) 我的实际代码如下所示: import java.util.Scanner; public class Main { public static void main (String[] args){ Scanner s

我用JAVA编写了这段代码,每次尝试执行它时,都会出现运行时错误,如下所示:

线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:7 位于Solution.main(Solution.java:26)

我的实际代码如下所示:

import java.util.Scanner;

public class Main {

    public static void main (String[] args){
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int scores[]=new int[n];
        for(int i=0;i<n;i++){
            scores[i]=scan.nextInt();
        }
        int m = scan.nextInt();
        int alice[]=new int[m];
        for(int j=0;j<m;j++){
            alice[j]=scan.nextInt();
        }

         int ranks1[]=new int [n];
        ranks1[0]=1;
        for(int k=1;k<(n+1);k++){
                 if((scores[k])<(scores[k-1])){
                        ranks1[k]=ranks1[k-1]+1;
                 }    
                 else if((scores[k])==(scores[k-1]))
                 ranks1[k]=ranks1[k-1];

        }
        int rank2[] = new int[m];
        for(int a=0,s=(n-1);(a<m) && (s>=0); ){
            if(alice[a]<scores[s]){
                rank2[a]=ranks1[s]+1;
                a++;
            }
            if(alice[a]==scores[s]){
                rank2[a]=ranks1[s];
                a++; 
                s--;
            }
            if(alice[a]>scores[s]){
                s--;
            }
        }

        for(int l=0;l<m;l++){
            System.out.println(rank2[l]);
        }

    }
}
import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int n=scan.nextInt();
整数分数[]=新整数[n];

对于(int i=0;i是),您正在尝试访问非法索引。第一次这样做是在这里:

for(int k=1;k<(n+1);k++){
  if((scores[k])<(scores[k-1])){
  //

for(int k=1;k数组从0开始。这意味着在每个
for
循环中,迭代器从
1
开始,并访问索引
k
中的数组(k是数组的大小)实际上,您正在尝试访问数组末尾之后的索引,这给了您一个
ArrayIndexOutOfBoundsException

您正在尝试访问数组长度之外的索引

这发生在这个代码片段中

 int ranks1[] = new int[n];
            ranks1[0] = 1;
            for (int k = 1 ; k < (n + 1) ; k++) {
                if ((scores[k]) < (scores[k - 1])) {
                    ranks1[k] = ranks1[k - 1] + 1;
                } else if ((scores[k]) == (scores[k - 1]))
                    ranks1[k] = ranks1[k - 1];

            }
int ranks1[]=新的int[n];
ranks1[0]=1;
对于(int k=1;k<(n+1);k++){
如果((分数[k])<(分数[k-1])){
ranks1[k]=ranks1[k-1]+1;
}如果((分数[k])==(分数[k-1]),则为else
ranks1[k]=ranks1[k-1];
}
解决这个问题的最好方法是调试它


这对你来说是一个很好的练习。请勾选这个

你在第26行错了。第26行是哪一行?程序应该怎么做?