有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

运行时出现拆分“java.lang.ArrayIndexOutOfBoundsException:1”错误

该程序编译得很好,但当我运行它时,会出现一个错误,更具体地说是: java.lang.ArrayIndexOutOfBoundsException:1

它正在以下位置获取错误:

String name = array[1];

我不知道为什么

这是出现问题的代码:

        infile = new Scanner(new FileReader("EmployeeData.TXT"));
        while(infile.hasNext()){
            String line = infile.nextLine();
            String array[] = line.split(":");
            String name = array[1];
            String id = array[2];
            double salary = Double.parseDouble(array[3]);
            Employee e;
            if (array[0].equals("s")){
                e = new SalariedWorker(id, name, salary);}
            else {
                boolean overtime = Boolean.parseBoolean(array[4]);
                if(overtime){
                    int maxhu = Integer.parseInt(array[5]);
                    e = new HourlyWorker(id, name, salary, maxhu);
                }
                else{
                    e = new HourlyWorker(id, name , salary);
                }
            }
            company.add(e);
        }

以下是本课程的其余部分,仅供参考:

它读取名为“EmployeeData.TXT”的文本文件:

S       Washington,George       000001      125000
H   MacDonald,Ronald        386218     7.80 true  40
H       Walton,Samuel           268517  8.21    false
H   Thomas,David            131313  9.45    true    38
H   Sanders,HarlandDavid    277651  8.72    false
S   Baron,James         368535  310236

共 (2) 个答案

  1. # 1 楼答案

    您正在":"上拆分,您的文本文件:

    S       Washington,George       000001      125000
    H   MacDonald,Ronald        386218     7.80 true  40
    H       Walton,Samuel           268517  8.21    false
    H   Thomas,David            131313  9.45    true    38
    H   Sanders,HarlandDavid    277651  8.72    false
    S   Baron,James         368535  310236
    

    没有这种性格。所以每个数组的大小都是1

    在一个不存在的角色上分裂是没有意义的,这让我很好奇为什么你会选择使用":"。我自己,我会在空白处分开,"\\s+"

    顺便说一句,这个问题很容易通过调试器或一些println进行调试:

    while(infile.hasNext()){
        String line = infile.nextLine();
        System.out.println("Unsplit String: " + line);
        String array[] = line.split(":");
        System.out.println("Split String: " + java.util.Arrays.toString(array));
    

    不管怎样,将来当你遇到类似的问题时,找出你的变量在错误发生的时间和地点是什么,这通常会引导你找到问题的根源,从而找到问题的解决方案

  2. # 2 楼答案

    它打破了这些界限:

        String line = infile.nextLine();
        String array[] = line.split(":");
        String name = array[1];
        String id = array[2];
    

    您正在尝试将数组[1]的值分配给name。。。但是数组中没有足够的元素

    假设你有line = "hey"并且你在第行调用split,你的数组的长度将只有1,因为没有“:”字符可以拆分