我尝试使用此代码填充整数数组:
int[] steps = new int[1000001];
steps[0] = 0;
steps[1] = 1;
steps[2] = 2;
for(int i = 1001; i < steps.length; i++){
if(steps[i]==0){
steps[i] = steps[i-1]+1;
}
int current = i;
for(int m = current; m > 1; m--){
int mult = current*m;
if(mult<steps.length){
int suma = steps[current]+1;
if(steps[mult]==0){
steps[mult] = suma;
}
if(suma<steps[mult]){
steps[mult] = suma;
}
}
}
}
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
for(int k = 0; k < n; k++){
int q = scan.nextInt();
System.out.println(steps[q]);
}
scan.close();
我得到了这个:
线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:-2147479015 在javaapplication6.JavaApplication6.main(JavaApplication6.java:26) C:\ Users \ User \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run.xml:53:Java返回:1 建筑失败(总时间:1秒)
但我不明白为什么会这样。我知道当您尝试访问不存在的索引时会发生此类异常。我已经多次检查了我的代码,但我还没有找到问题。
你知道这个数字是什么意思吗?因为这让我感到困惑:
线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException: -2147479015
NetBeans表示问题出在:
javaapplication6.JavaApplication6.main(JavaApplication6.java:的 26 )
第26行就是这个:
if(steps[mult]==0)
我认为这就是说,在某些时候,程序正在尝试访问数组中不存在的索引。问题是,我不明白这可能会发生在那里。
我之前提到这一行是为了避免这种情况,但似乎无法发挥作用:
if(mult<steps.length)
然后我通过将其更改为此行来修改该行,它似乎工作。它不再显示例外:
if(mult<steps.length && mult >=0)
现在的问题是,显然,它没有进入代码的这一部分:
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
for(int k = 0; k < n; k++){
int q = scan.nextInt();
System.out.println(steps[q]);
}
scan.close();
我想先了解一下,为什么会出现这种异常以及为什么会出现这样的问题?#34;通过添加代码的其他部分,第二,为什么我的代码似乎陷入我的第一个for循环。
如果你能帮我理解那些事情,我真的很感激。
提前致谢。
答案 0 :(得分:2)
在您的代码中
int mult = current*m;
其中current
和m
是steps
数组的大小
所以1000001
* 1000001
将超出数组的大小并且还超过max int值
我不确定你想做什么逻辑
if(steps[mult]==0){
您可以使用此代码显示问题
int val = 1000000;
for (int i = 0; i < 100; i++) {
val = val * val;
if (val < 0) {
System.out.println(val);
}
}