任何想法为什么这台扫描仪下次阅读都不会起作用

时间:2014-04-26 17:20:36

标签: java arrays delimiter

我正在尝试创建一个以初始大小开头的数组,可以添加条目。 (我必须使用数组)。要打印数组,我必须遵循以下代码:

public String printDirectory() {
        int x = 0;
        String print = String.format("%-15s" + "%-15s" + "%4s" + "\n", "Surname" , "Initials" , "Number");
//      Sorts the array into alphabetical order
//      Arrays.sort(Array);
        while ( x < count ){
            Scanner sc = new Scanner(Array[x]).useDelimiter("\\t");
            secondName[x] = sc.next();
            initials[x] = sc.next();
            extension[x] = sc.next();
            x++;
        }

        x = 0;
        while ( x < count){
            print += String.format("%-15s" + "%-15s" + "%4S" + "\n", secondName[x] , initials[x] , extension[x]);
            x++;
        }
        return print + "" + Array.length;


    }

请在return语句中忽略额外的Array.length。

无论如何,这工作正常,首先,Array读取一个文件,该文件在每行上形成如NameInitialsnumber。

所以我尝试制作一个newEntry方法,当我想要打印数组时会导致问题。当我添加一个新条目时,如果Array太小,它将使数组变大并添加条目。我制定了方法来确保它有效并且确实有效。此方法的以下代码为:

public void newEntry(String surname, String in, String ext) {

        if (count == Array.length) {
            String entry = surname + "\t" + in + "\t" + ext;
            int x = Array.length + 1;
            String[] tempArray = new String[x];
            System.arraycopy(Array, 0, tempArray, 0, Array.length);
            Array = tempArray;
            Array[count] = entry;
            Arrays.sort(Array);
        } else {
            String entry = surname + "\t" + in + "\t" + ext;
            Array[count] = entry;
            Arrays.sort(Array);
        }
        count++;
    }

问题是当我调用printDirectory方法时,sc.next()有问题。错误消息如下:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
    at ArrayDirectory.printDirectory(ArrayDirectory.java:106)
    at ArrayDirectory.main(ArrayDirectory.java:165)

我真的很擅长编码,我不知道出了什么问题。我知道新条目有问题,但我不知道是什么。非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您的其他数组secondNameinitialsextension似乎不够大。

你也需要让它们更大。或者甚至更好,当你仔细考虑它时,你会认识到你根本不需要它们。