java - 我有一个 Java 程序,上面写着“索引 1 超出长度 1 的范围”
问题描述
我的 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)
解决方案
您需要测试 index < size() 不小于或等于。索引从零运行到大小 -1
推荐阅读
- python - 操作顺序 - Python 3
- node.js - 快递中的bodyparse文本数据
- winapi - 如何使用 sendmessage 发送在 win32 中具有 timer proc 的 wm_timer
- unity3d - 统一漏洞?排序组需要设置为 1 并设置回 0 以使透明度排序轴正常工作(内部视频)
- javascript - 如何“四舍五入”数字,通过在javascript中的第二个数字后放置零
- c# - 调试公共交通 / Rabbit MQ
- linux - 如何将文件从给定目录复制到目标目录的随机目录
- javascript - 如何在 php while loop JSON 中制作更高效的 js for 循环
- java - 有序流的状态过滤器
- reactjs - React - 来自变量的 FontAwesomeIcon