【问题标题】:Problem with comparing a value to a specific object of an ArrayList Java将值与 ArrayList Java 的特定对象进行比较时出现问题
【发布时间】:2020-04-24 16:18:46
【问题描述】:

我的 Student 类有一个构造函数,它设置值 int s_code、String name 和 int age。

当我创建 Student 类的对象时,我将它传递给 ArrayList AllStudents。

我的问题是我希望用户输入一个 Id 并检查 ArrayList 中是否有该 Id。如果不让他添加新学生,请告诉他再试一次。

我试图用 for 和 inside 循环遍历 ArrayList 我有一个带有 .contains 的 if 语句,如果它是真的,我有一个简单的 println("Good") 来测试它。

当我运行我的程序时,它会跳过它。

这是我的代码:

static ArrayList<Student> AllStudents = new ArrayList<Student>();
static void InitStudents() //this is a method that creates some students when I call it in main.
{
    AllStudents.add(new Student(1,"James",15));
    AllStudents.add(new Student(2,"John",16));
    AllStudents.add(new Student(3,"Rose",15));

}


System.out.println("Enter the ID of the student you want to add.");
            Scanner get_new_code = new Scanner(System.in);
            int s_code = get_new_code.nextInt();



for(Student code : AllStudents) 
{
     if (AllStudents.contains(s_code)) //I think that I have to include age and name for it to work.
     {
        System.out.println("Good");
     }       
} 

顺便说一下,如果我没有解释什么或者我做错了什么,我是 Java 新手。

【问题讨论】:

    标签: java


    【解决方案1】:

    那个高级循环对你实现它的方式没有帮助。

    for(Student code : AllStudents){          //"code" is one element out of the list
        if (AllStudents.contains(s_code)){    //here you are checking the whole list
            System.out.println("Good");
        }       
    } 
    

    这可能是您正在寻找的:

    for(Student code : AllStudents){       
        if(code.getSCode() == s_code){       //here the one element named "code",
                                             //out of the list, will be checked
            System.out.println("Good");
        }       
    } 
    

    getter 方法(例如调用 getSCode())将帮助您查询学生对象的每个属性。它将返回您正在查看的对象的 s_code。

    作为示例编辑:

    public class Student{
        int s_code;
        String name;
        int age;
    
        public Student(int code, String name, int age){
            this.s_code = code;
            this.name = name;
            this.age = age;
        }
    
        public int getSCode(){
            return s_code;
        }
    
        public int setSCode(int newSCode){
            this.s_code = newSCode;
        }    
    }
    

    使用 getter 和 setter,您可以请求对象的数据,也可以设置数据。

    【讨论】:

    • 好吧,现在我明白了,因为我在搜索时发现了类似的东西,但我不明白。但是当我输入 code.getSCode() 我得到错误找不到符号如果我没有错,当我没有初始化变量时会发生这种情况但是在这里我们将代码初始化为学生号?
    • 你必须在你的类中实现getter和setter方法。那是“助手”方法,它将在对象中提供或设置变量。在您的学生班级中,您必须像这样声明该方法: public int getSCode(){return s_code;} 您可以从任何地方调用对象的该方法,它将返回您分配给该对象的 s_code。在您的情况下是学生对象。
    • 哦,那是我的错。我在我的主课中声明 getSCode 而不是 Student。非常感谢您的解释和对我的耐心,因为我是新手。它工作得很好。
    【解决方案2】:

    AllStudents 包含学生,s_code 是一个 int。

    您可以先通过 id 映射进行搜索。假设代码位于名为 Id 的字段中。

     allStudents.stream().map(s -> Student::getId).collect(Collectors.toList()).contains(s_code);
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 2014-12-07
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多