有 Java 编程相关的问题?

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

java在arraylist中将我选择的名称的布尔值设置为inactive,然后将它们存储在另一个数组中?

我会尽量简短地解释代码。。我有一个arraylist,其中包含来自的成员。txt文件。在这个文件中,我首先使用布尔值将所有成员设置为活动的“true”。我想做的是使用一个方法,将一个字符串中的名字(我想将.txt文件中的人的名字设置为inactive)设置为非活动(false),然后将该人存储在另一个数组中,并可能将其从活动列表中删除,以便它不包含非活动成员

我就是这样开始的

public static void inActivateName(ArrayList<Member> register, String name) {
    String s = "";
    int counter = 0;
    for(Member m : register) {
        if(m.getFullName().equals(name)) {
            s += (m) + "\n" ;
            counter++;
        }
    } 
    if(counter < 2) {
        System.out.println("Found the name " + name);
        System.out.println("Do you really want to inactivate" + name + " ? " + " (Y/N) ");
        svar = lasaIn.nextLine();
    } else if(svar.equals("Y")) {
            // Inacivate member ? ? ? 
    } else if(svar.equals("N")) {
        System.out.println("Returning to the main menu");
        Menu.mainMenu();    
    }  else {
    System.out.println("Found the name " + name + " " + counter + " times");
    System.out.println(s);
    System.out.println("Which member do you want to inactivate? (choose by id) ");
    // inActivateId(?) not the problem 
    }
}

在我的成员类(另一个文件)中,我有一个方法将所有当前“成员”设置为false using

public boolean getIsActive() {
    return isActive;
}

构造函数执行以下操作:isActive=true

我真的不知道如何解决这个问题,任何帮助都非常感谢


共 (3) 个答案

  1. # 1 楼答案

    为您的成员活动度创建一个setter:

    public void setActive(boolean active) {
      this.active = active;
    }
    
    public boolean isActive(){
      return this.active;
    }
    

    现在为您的代码设计提供一个建议:

    做一个Map<String, Map<String,Member>>。外部映射是按名称命名的成员组。内部映射是按id的成员。通过这种方式,您可以真正简化代码:

    public static void inActivateName(Map<String,Map<String, Member>> activeMembers, Map<String,Map<String, Member>> inactiveMembers, String name) {
        Map<String, Member> members = activeMembers.get(name);
        if(members != null)
           System.out.println("Found" + members.size() + " members with the name " + name);
           System.out.println("Do you really want to inactivate" + name + " ? (Y/N)";
           String svar = lasaIn.nextLine();
           if(svar.equals("Y")) {
                System.out.println("Which member do you want to inactivate? (choose by id)");
                svar = lasaIn.nextLine();
                Member member = members.get(svar);
                if(member == null) {
                   System.out.println("No such id " + svar);
                } else{
                   member.setActive(false);
                   System.out.println("Member with name " + name + " and id " + svar + " inactivated");
                   activeMembers.remove(svar);
                   if(inactiveMembers.get(name) == null){
                      inactiveMembers.put(name, new HashMap<String,Member>());
                   }
                   inactiveMembers.get(name).put(svar, member);
                }
           }
        } else {
          System.out.println("No such name.");
        }
    
    
        System.out.println("Returning to the main menu");
        Menu.mainMenu();
    }
    

    编写此示例是为了说明如何在场景中更好地使用地图,但它并不完美。如果您决定使用这个概念,那么进行一些重构可能是明智的

  2. # 2 楼答案

    有一个临时对象,当名称匹配被命中时,它被设置为当前迭代对象。只需列出。删除(名称)和tempObj。在指定的块中,isActive=false

  3. # 3 楼答案

    我希望下面的解决方案能为您解决

    import java.util.*;
    public class HelloWorld{
    
         public static void main(String []args){
            ArrayList<String> active=new ArrayList<String>();
            active.add("person1");
            active.add("person2");
            active.add("person3");
            ArrayList<String> inactive=new ArrayList<String>();
            deactive("person2",active,inactive);
            System.out.println(active);
            System.out.println(inactive);
    
         }
         public static void deactive(String person, ArrayList active, ArrayList inactive)
         {
         if(active.contains(person))
         {
            active.remove(person);
            inactive.add(person);
         }
         }
    }
    

    如您所见,我有两个ArrayList处于活动状态和非活动状态。最初,所有人员都存储在活动arraylist中,而非活动arraylist为空。然后我调用一个函数,发送我想从活动数组中删除的人的名字。调用函数后,我已经打印了两个ArrayList。您可以看到,该特定人员已从活动arraylist中删除,并添加到非活动arraylist中

    我希望有帮助