【问题标题】:I have a Java program that says " Index 1 out of bounds for length 1" [duplicate]我有一个 Java 程序,上面写着“索引 1 超出长度 1 的范围”[重复]
【发布时间】:2020-11-08 17:21:14
【问题描述】:

我的 COP 2800 学校班级的 ManageEmployees 班级有这段代码,它说在案例 2 中存在错误

import java.util.ArrayList;
import java.util.Scanner;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.io.*;

public class ManageEmployees {

    public static void main(String[] args) throws IOException {
        java.io.File file = new java.io.File("employee.txt");
        java.io.PrintWriter Manage = new java.io.PrintWriter(file);
        ArrayList<Employee> employee = new ArrayList<Employee>(4);
        Scanner emp = new Scanner(System.in);
        String firstName, lastName, hireDate;
        LocalDate date;
        double payRate;
        boolean x = false;
        boolean a = false;
        boolean b = false;
        boolean c = false;
        boolean d = false;
        do {
            System.out.println("Enter you choice:");
            System.out.println("1 - Add Employees");
            System.out.println("2 - Display Employees");
            System.out.println("3 - Exit");
            String choice = emp.nextLine();
            switch(choice) {
            case "1":
                do {
                System.out.println("Enter the first name.");
                firstName = emp.nextLine();
                if(firstName.length() == 0) {
                    System.out.println("No value detected! Please enter a value.");
                    a = true;
                }
                else
                {
                    Manage.println(firstName);
                    a = false;
                }
                }while(a != false);
                do {
                    System.out.println("Enter the last name.");
                    lastName = emp.nextLine();
                    if(lastName.length() == 0) {
                        System.out.println("No value detected! Please enter a value.");
                        b = true;
                    }
                    else
                    {
                        Manage.println(lastName);
                        b = false;
                    }
                }while(b != false);
                do {
                    System.out.println("Enter the hire date.");
                    hireDate = emp.nextLine();
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
                    date = LocalDate.parse(hireDate, formatter);
                    if(hireDate.length() == 0) {
                        System.out.println("No value detected! Please enter a value.");
                        c = true;
                    }
                    else
                    {
                        Manage.println(hireDate);
                        c = false;
                    }
                }while(c != false);
                do {
                    System.out.println("Enter the pay rate.");
                    payRate = emp.nextDouble();
                    if(payRate == 0) {
                        System.out.println("No value detected! Please enter a pay rate.");
                        d = true;
                    }
                    else
                    {
                        Manage.println(payRate);
                        d = false;
                    }
                    
                }while(d != false);
                Employee add = new Employee(firstName, lastName, date, payRate);
                employee.add(add);
                x = true;
                break;
            case "2":
                StringBuilder E = new StringBuilder();
                for(int idx = 0; idx <= employee.size(); idx++) {
                    E.append("[firstName = " + employee.get(idx) +", lastName = " + employee.get(idx) + ", hireDate = " + employee.get(idx) + ", payRate = " + employee.get(idx) + "]");
                }
                System.out.println("class edu.seminolestate.manageemployees.Employees " + E);
            }
        }while(x != false);
    }


}

它继续这样说

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
    at java.base/java.util.Objects.checkIndex(Objects.java:373)
    at java.base/java.util.ArrayList.get(ArrayList.java:427)
    at edu.SeminoleState.ManageEmployees.ManageEmployees.main(ManageEmployees.java:94)

【问题讨论】:

  • 员工名单没有价值
  • 索引从0employee.size()-1:for(int idx = 0; idx &lt; employee.size(); idx++)
  • 请注释您的代码以表明哪一行是第94行。代码new ArrayList&lt;Employee&gt;(4);没有将任何项目放入ArrayList中,只是设置了初始容量,这很糟糕,因为默认容量更大.

标签: java arraylist switch-statement append


【解决方案1】:

您需要测试 index

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多