1

我对java很陌生。我必须在学校制作一个程序,但是当我尝试运行它时,我得到了一个错误。ArrayIndex....... : 0 在第 139 行,这将是我在前面放两个 * 的地方。我很累自己找到错误。我整天都在为此工作。谢谢!

PS:我正在使用一个名为 easyIO 的包,以防你们中的一些人无法理解某些命令。

编辑:我终于找到了,这是一个小问题。但是现在我不能让该死的程序找到我在数组中搜索的内容。

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

3 回答 3

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?

在一个侧面但严肃的说明中,请阅读如何比较 Java 中的字符串?

于 2013-09-25T16:00:01.883 回答
1
int teller = 0;
String[][]  ArtArray = new String[teller][4];

This is causing the problem (well described by Sotirios Delimanolis' answer).

You can solve your problem by initializing AryArray just before second for-loop in which case teller will be greater than 0 after being incremented by first for-loop.

String[][]  ArtArray = new String[teller][4];
for(i = 0; i < ArtArray.length; i++) // improvement here too
于 2013-09-25T16:23:00.547 回答
0

当你有一个数组时,数组中的第一个元素通过索引 0 访问。这意味着只有一个元素的数组只有在你访问索引 0 时才有效,所有其他索引值都将超出范围。

如果您有一个零元素数组,则在索引 0(或任何其他索引值)处没有可访问的内容。

正如 Sotirios 所提到的,new String[tellar][4]分配一个由零元素组成的数组,每个元素是一个由四个元素组成的数组。这是因为int tellar = 0; 由于数组有零个元素,索引 0 超出范围。

于 2013-09-25T16:07:31.980 回答