当前位置: 首页 > 知识库问答 >
问题:

访问和修改数组列表的问题

卫梓
2023-03-14

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

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;

    }

}

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;
    }
}

当我输入工资单号码时,我的程序只识别第一个工作人员。任何其他工作人员都不会被‘发现’。我在哪里出了问题?如何从数组中删除特定的工资单号码并向用户请求另一个输入(直到数组为“空”)。

共有1个答案

宋斌
2023-03-14

删除else块中的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语句,这个循环将只执行一次。

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

    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 -------------");

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

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

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

 类似资料:
  • Swift 5.x Set 访问和修改 1.遍历 Set 可以使用for-in遍历Set 因为Set是无序的, 如果要顺序遍历Set, 使用sorted()方法 let courses: Set = ["Math", "English", "History"] for course in courses { print(course) } print("--- 分割线 ---") for

  • 问题内容: 我有以下字典: 我想将一个条目附加到key1-> key2-> key3上,其值为’blah’,产生: 我正在寻找一种与键的数量无关的通用解决方案,即即使不存在从key3向下的键,key1-> key2-> key3-> key4-> key5也应该起作用。这样我得到: 提前致谢。 问题答案: 您可以使用该函数遍历一系列嵌套字典: 演示: 当密钥不存在时,此版本引发异常: 但您可以替换

  • 我有一个问题: 我有一个列表Java,我填充了不同的值。例如,我有: 我也有其他价值观。现在,我想在这个列表中只搜索第一个字段。例如,我想要A的indexOf。我尝试过写这段代码: 但我得到-1作为回报。我想知道在加载数组时如何访问列表中的字段。

  • 问题内容: 我正在读取文件并将其存储在t1中。如何访问t1中的元素?当我尝试打印时,我得到的是地址而不是值。还有和之间的区别是什么? 输出: 问题答案: String []是一个字符串数组,因此其未如您所愿打印的原因,请尝试: 或更简洁: 或者更好:

  • 问题内容: 如何从列表中的每个元组返回第二个值? 所需的输出: 问题答案: 具有列表理解能力。

  • 问题内容: 我的flask views.py中有这个 我的样本.html中有这个 这给了我一个空的计数变量。如何获得与python中的测试列表相同的计数? 问题答案: 当你将变量插入模板时,{{ test }}它将采用对象表示形式。对于int的列表,[1,2,3,4,5,6]它将被呈现为[1, 2, 3, 4, 5, 6],因此它是有效的javascript数组,但是此方法对于不具有类似javas