繁体   English   中英

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 7

[英]Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7

我已经用 JAVA 编写了这段代码,每次我尝试执行它时,都会发生运行时错误,它是这样的:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 7 at 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]);
        }

    }
}

我在谷歌上搜索过这个问题很多次,它告诉我,如果我尝试访问数组中的任何非法索引,就会发生这种情况。 但我不想这样做。 有谁能够帮助我? 如果我在某处错了,请纠正我。

是的,您正在尝试访问非法索引。 你第一次这样做是在这里:

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

当您尝试访问scores[k]和 k = n 时会发生什么? 请记住,数组索引从 0 开始。这意味着大小为n的数组的最大索引将为n-1 ,而不是n

数组从 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];

            }

解决这个问题的最好方法是调试它

这对你来说是个好习惯。 请检查这个调试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM