gpt4 book ai didi

java - 访问和修改数组列表时出现问题

转载 作者:行者123 更新时间:2023-12-01 16:54:05 25 4
gpt4 key购买 nike

我想创建一个程序,允许用户删除具有指定工资单号码的员工。

该程序应按如下方式运行:

程序在要求用户输入他们想要删除的工资单号码之前,会在数组列表中显示当前的员工。然后,用户输入三名员工之一的工资单号码并按回车键。按 Enter 后,程序应从数组列表中删除该特定工作人员并再次显示整个列表(显然错过了他们已删除的工作人员)。如果他们不希望删除任何工资单号码,则工资单号码条目应为 0,然后应再次显示列表内容。

我有以下文件和结构:

---编辑---:ArrayListTest.java

import java.util.*;

import personnelPackage.Personnel;

public class ArrayListTest
{
static Scanner keyboard = new Scanner(System.in);

public static void main(String[] args)
{
long searchQuery;

ArrayList<Personnel> staffList = new ArrayList<Personnel>();
Personnel[] staff =
{new Personnel(123456,"Smith","John"),
new Personnel(234567,"Jones","Sally Ann"),
new Personnel(999999,"Black","James Paul")};

for (Personnel person:staff)
staffList.add(person);

do
{
showDisplay(staffList);

System.out.print("\nPlease enter a payroll number to search: ");
searchQuery = keyboard.nextLong();

searchForPayrollNumber(staffList, searchQuery);


}while(!(searchQuery == 0));


}

private static void showDisplay(ArrayList<Personnel> staffList)
{
System.out.print("\n------------- CURRENT STAFF LIST -------------\n");
for (Personnel person : staffList)
{
System.out.println("Payroll number: " + person.getPayNum());
System.out.println("Surname: " + person.getSurname());
System.out.println("First name(s): " + person.getFirstNames() + "\n");
}
}

public static void searchForPayrollNumber(ArrayList<Personnel> staffList, long searchQuery)
{
long index = staffList.indexOf(searchQuery);;

for (Personnel person: staffList)
{
if (person.getPayNum() == searchQuery)
{
System.out.print("\n------------- Staff member found and removed! -------------");
System.out.println("\n\nFirst Name(s): " + person.getFirstNames());
System.out.println("\nSurname: " + person.getSurname());
System.out.print("\n-----------------------------------------------");

staffList.remove(index);
return;
}
}

System.out.print("\n------------- No staff members found. Program terminated -------------");
return;

}

}

Personnel.java(在其自己的名为 personnelPackage 的包中)

package personnelPackage;

public class Personnel
{
private long payrollNum;
private String surname;
private String firstNames;

public Personnel(long payrollNum, String surname, String firstNames)
{
this.payrollNum = payrollNum;
this.surname = surname;
this.firstNames = firstNames;
}

public long getPayNum()
{
return payrollNum;
}

public String getSurname()
{
return surname;
}

public String getFirstNames()
{
return firstNames;
}

public void setSurname(String newName)
{
surname = newName;
}
}

如果我输入工资单号码,我的程序目前只会识别第一位员工。任何其他工作人员都不会被“找到”。我这哪里出错了?如何从数组中删除特定的工资单号码并要求用户提供另一个输入(直到数组为“空”)。

最佳答案

删除 else block 中的 return 语句。

    for (Personnel person: staff)
{
if (person.getPayNum() == searchQuery)
{
System.out.print("\n------------- Staff member found! -------------");
System.out.println("\n\nFirst Name(s): " + person.getFirstNames());
System.out.println("Surname: " + person.getSurname());
return;
}
else
{
System.out.print("\n------------- No staff members found -------------");
return; // Remove this one.
}
}

通过在条件的每个分支中使用 return 语句,该循环将只执行一次。

请注意,您可能还希望将 else 的内容移到循环之外,否则您将被告知对于每个检查的人员“未找到工作人员”。

    for (Personnel person: staff)
{
if (person.getPayNum() == searchQuery)
{
System.out.print("\n------------- Staff member found! -------------");
System.out.println("\n\nFirst Name(s): " + person.getFirstNames());
System.out.println("Surname: " + person.getSurname());
return;
}
}
System.out.print("\n------------- No staff members found -------------");
<小时/>

编辑有关删除元素的问题:

您当前的代码将不起作用:indexOf 将返回 -1,因为列表包含 Personnel 实例,而不是工资单号码。如果这确实有效,您就不需要迭代列表来再次查找该元素:您已经知道它在列表中的位置。

要进行有效的删除,您需要使用迭代器;增强的 for 循环不起作用。粗略的实现如下:

Iterator<Personnel> it = staff.iterator();
while (it.hasNext()) {
Personnel person = it.next();
if (person.getPayNum() == searchQuery)

{ //... 打印等 it.remove(); 返回; } }

关于java - 访问和修改数组列表时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35220157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com