ArrayIndexOutOfBoundsException:0

时间:2013-09-25 15:58:51

标签: java arrays

我对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]);
            }

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来解决您的问题,在这种情况下,teller0增加后将大于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超出范围。