[英]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 6
[英]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.