在java中声明数组

时间:2011-09-18 12:07:47

标签: java

当我在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];
    }

}

2 个答案:

答案 0 :(得分:0)

在数组中放入一些值..... IndexOutOfBoundsException exception通常在调用该数组地址时出现 哪个不可用

了解如何初始化数组视图click here

答案 1 :(得分:0)

您没有发布antalSlumptalMindreÄn500antalSlumptal可能的值,但根据您的代码,我认为两者都是正数且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。如果变音符号是类名的一部分,情况会变得更糟,因为这会导致类文件名包含变音符号。