繁体   English   中英

在Java中声明数组

[英]Declare array in 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];
    }

}

将一些值放在数组中..... IndexOutOfBoundsException异常通常在调用该数组地址时出现,这是不可用的

要了解如何初始化数组视图, 请单击此处

您没有发布antalSlumptalMindreÄn500antalSlumptal可能的值,但是根据您的代码,我假定两者均为正,并且antalSlumptal > antalSlumptalMindreÄn500

即让antalSlumptal = 20和antalSlumptalMindreÄn500= 5。

那么数组slumptalMindre的长度是5,而slumptalStörre的长度是15。但是没有数组slumptal声明。

在for循环变量x的范围从0到19,并且在每次迭代中,您slumptalMindre使用索引x访问数组slumptalMindre 显然,当x值变为5时,这会导致ArrayIndexOutOfBoundsException。

我只能猜测你的意图是什么。 似乎您想对数组不slumptal使用一些过滤器,并将所有小于500的值放在另一个数组中。

使用数组作为过滤结果的一个问题是,您不知道循环结束后结果的长度。 但是您必须事先初始化数组。

因此,一种解决方案是使用两个循环。 第一个循环遍历数组并计算小于500的数字。然后以正确的大小初始化数组,第二个循环再次遍历数组并将结果值复制到结果数组。 在第二个循环中,您必须谨慎区分访问数组不正确的索引和访问较短结果数组的索引:

// 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的变量名和类名中使用Umlauts是有效的。 但是这样做被认为是不好的风格,因为您很容易遇到问题。 除非您指定-encoding选项,否则Java编译器将平台默认编码用于源文件。 在Windows上,默认编码为Cp1252,在Linux上通常为UTF-8。 如果Umlauts是类名的一部分,情况会变得更糟,因为这会导致包含Umlauts的类文件名。

暂无
暂无

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

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