当我在java中声明一个数组时,我在运行时遇到此错误:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException。尽管变量totalNumbers有一个值。当我将该变量替换为类似5的数字时,它正在工作。当声明数组时,它必须是一个数字吗?
int randomNumbers[];
randomNumbers = new int[totalNumbers];
添加了更多代码,但变量名和评论都是瑞典语!但是,尽管如此,代码可能仍然很难!?或者为什么不学习一些瑞典语!= :)。
// deklarera arrays för tal under 500 och för tal över 500
int slumptalMindre[];
slumptalMindre = new int[antalSlumptalMindreÄn500];
int slumptalStörre[];
slumptalStörre = new int[antalSlumptal - antalSlumptalMindreÄn500];
//gå genom första array och omplacera tal till ny array
for(int x = 0; x < antalSlumptal; x++) {
if(slumptal[x] < 500) {
slumptalMindre[x] = slumptal[x];
}
}
答案 0 :(得分:0)
在数组中放入一些值..... IndexOutOfBoundsException exception通常在调用该数组地址时出现 哪个不可用
了解如何初始化数组视图click here
答案 1 :(得分:0)
您没有发布antalSlumptalMindreÄn500
和antalSlumptal
可能的值,但根据您的代码,我认为两者都是正数且antalSlumptal
&gt; antalSlumptalMindreÄn500
。
即。让antalSlumptal = 20和anntalSlumptalMindreÄn500= 5。
然后数组slumptalMindre的长度为5,slumptalStörre的长度为15.但是没有数组slumptal
的声明。
在for循环中,变量x的范围是0到19,并且在每次迭代中,您都可以访问索引为x的数组slumptalMindre
。显然,当x值变为5时,这会导致ArrayIndexOutOfBoundsException。
我只能猜到你的意图。您似乎想在数组slumptal
上应用一些过滤器,并将所有小于500的值放在另一个数组中。
使用数组作为过滤结果的一个问题是,在循环结束后您不知道结果的长度。但是你必须事先初始化数组。
所以一个解决方案可能是使用两个循环。第一个遍历数组并计算少于500的数字。然后使用正确的大小初始化数组,第二个循环再次遍历数组并将结果值复制到结果数组。在第二个循环中,您必须小心区分访问数组slumptal的索引和访问较短结果数组的索引:
// count the numbers less than 500
int count = 0;
for(int x = 0; x < slumptal.length; x++) {
if(slumptal[x] < 500)
count++;
}
slumptalMindre = new int[count];
int y = 0; // Index to access array slumptalMindre
for(int x = 0; x < slumptal.length; x++) {
if(slumptal[x] < 500)
slumptalMindre[y++] = slumptal[x];
}
但上面的解决方案不是最佳的,因为你必须遍历数组两次。这只是因为结果应该是固定长度的数组。在这种情况下,使用像List
这样的动态大小的数据结构更容易:
// Using a ArrayList of Integer values as the result
List<Integer> slumptalMindre = new ArrayList<Integer>();
for(int x = 0; x < slumptal.length; x++) {
if(slumptal[x] < 500)
slumptalMindre.add(slumptal[x]);
}
关于编码风格的另一个提示:在Java中使用变量和类名称的变音符号是有效的。但这样做被认为是糟糕的风格,因为你很容易遇到问题。除非指定-encoding
选项,否则Java编译器将对源文件使用平台默认编码。在Windows上,默认编码为Cp1252,在Linux上通常为UTF-8。如果变音符号是类名的一部分,情况会变得更糟,因为这会导致类文件名包含变音符号。