我对java很新。我必须在学校制作一个程序,但是当我尝试运行它时,我收到一个错误。 ArrayIndex .......:第139行的0,这就是我把两个*放在前面的地方。我很累,自己找错了。我一整天都在研究这个问题。 谢谢!
PS:我正在使用名为easyIO的软件包,以防你们中的一些人无法理解某些命令。
编辑:我终于找到了,这是一个小问题。但现在我无法让该死的程序找到我在Array中搜索的内容。
void UtskriftArt() {
In Utskrift = new In();
In søkefil = new In("Fugler.txt");
int i= 0;
int teller = 0;
String[][] ArtArray = new String[teller][4];
for(; i > 0 && !søkefil.endOfFile(); i++){
søkefil.readLine();
teller++;
if(søkefil.endOfFile()){
søkefil.close();
}
}
System.out.print("Hvilken art vil du søke opp og skriv ut obeservasjonsdata for? ");
String ArtSøke = Utskrift.inWord().trim();
String Art = " ";
System.out.println("\t\t" + Art);
for(i = 0; i <= ArtArray.length; i++){
**if(ArtSøke == ArtArray[i][0]){
Art = ArtArray[i][0];
System.out.print(ArtArray[i][1]);
System.out.print("\t" + ArtArray[i][2]);
System.out.println("\t" + ArtArray[i][3]);
}
答案 0 :(得分:5)
您的数组声明为
int teller = 0;
String[][] ArtArray = new String[teller][4];
它的第一个维度是大小0.它没有任何元素,所以你不能使用
访问索引0处的元素if(ArtSøke == ArtArray[i][0]){
^ i is 0
如果使用正确的for
循环
for(i = 0; i < ArtArray.length; i++){
请注意,条件仅为<
,而非<=
。如果它是<=
,你将总是超出范围,因为数组使用从0开始的索引。
您应该声明要包含的实际大小
teller = 1; // 1, 2, 3, more?
有一方面但请注意,请阅读How do I compare strings in Java?
答案 1 :(得分:1)
int teller = 0;
String[][] ArtArray = new String[teller][4];
这导致了这个问题(Sotirios Delimanolis'answer详细描述)。
您可以在AryArray
之前初始化second for-loop
来解决您的问题,在这种情况下,teller
在0
增加后将大于first for-loop
。< / p>
String[][] ArtArray = new String[teller][4];
for(i = 0; i < ArtArray.length; i++) // improvement here too
答案 2 :(得分:0)
当你有一个数组时,数组中的第一个元素由索引0访问。这意味着只有当你访问索引0时,一个带有1个元素的数组才会起作用,所有其他索引值都将超出范围。
如果你有一个零元素数组,那么在索引0(或任何其他索引值)没有任何东西可以访问。
如Sotirios所述,new String[tellar][4]
分配一个零元素数组,每个元素是一个包含四个元素的数组。这是因为int tellar = 0;
由于数组的元素为零,因此索引0超出范围。