【问题标题】:Type mismatch when trying to search an Array List尝试搜索数组列表时类型不匹配
【发布时间】:2020-06-30 16:04:19
【问题描述】:

可能是您很容易发现的东西,但我已经坚持了一段时间了。
我正在尝试在ArrayList 中搜索特定文本,但我在搜索方法中发现类型不匹配,显示为“can'not convert from element type Student to String”。我的代码如下:

大学班:

import java.util.ArrayList; 
import java.util.Iterator;
import java.util.List;

public class College {

    private ArrayList<Student> studentList;

    public College()
    {
        studentList = new ArrayList<Student>();           
    }

    public void join(Student newStudent)        
    {
        studentList.add(newStudent);    
    }

    public int numberOfStudents()
    {       
     return studentList.size();       
    }

    public void searchStudents(String searchString) 
    {
        for(String element : studentList){ //Error occurs here
            if(element.contains(searchString)){
                System.out.println(element);
            }
        } 
    }

    public void listmessagesForEach()
    {
        for(String element : studentList){ //Error occurs here
            System.out.println(element);
        }
    }
}

学生班:

public class Student {

    private String name;
    private int month;
    private int number;
    private int studentId;

    public Student(String name, int month, int number, int studentId)
    {      
        this.name = name;
        this.month = month;
        this.number = number;
        this.studentId = studentId;
    }

    public String getName()
    {
        return name;
    }

    public int getMonth()
    {
        return month;
    }

    public int getYear()
    {
        return number;
    }

    public int getStudentID()
    {
        return studentId;
    }

}

测试类:

public class Test {


    public static void main(String args[]){


        College myCollege = new College();


        myCollege.join(new Student("Dave Gerry", 2, 1015, 67));
        myCollege.join(new Student("Heidi Pollock", 5, 1017, 57));
        myCollege.join(new Student("Gary Herr", 7, 1013, 47));

        myCollege.numberOfStudents();
        System.out.println("The college has " +
                myCollege.numberOfStudents() +
                " students.");

        String s;
        s = "Herr";
        myCollege.searchStudents(s);

   }
}

我需要searchStudents 来识别列表中的文本。错误可能还与为什么 listmessages 不起作用有关。

这可能是一个简单的问题,只是由于目前无法上课,现在很难与我的导师联系。

谢谢

【问题讨论】:

  • 请在问题中添加从异常中获得的整个堆栈跟踪
  • 显然studentList 包含学生而不是字符串

标签: java arrays list


【解决方案1】:

studentList 包含 Student 类型的对象,而不是字符串:

public void searchStudents(String searchString) {
    for (Student student : studentList) {
        if (student.getName().contains(searchString)) {
            System.out.println(student.getName());
        }
    } 
}

然后您可以使用getName() getter 获取学生的姓名。该值是您可以检查的字符串。

关于listmessages方法:

public void listmessagesForEach() {
    for (Student student : studentList) {
        System.out.println(student.getName());
    }
}

或者:

public void listmessagesForEach() {
    for (Student student : studentList){ //Error occurs here
        System.out.println(student);
    }
}

但最后,您应该在 Student 类中添加一个 toString() 方法,该方法会返回一个字符串及其名称或字段的串联。

【讨论】:

  • 非常感谢。对于 listmessages 方法,我说我只需要一个 toString 方法是对的吗?
  • 您应该在 for 中执行相同的操作,因为它也是 Student 对象的集合,但是,listmessagesForEach() 应该做什么?打印所有学生的名字?要不然是啥?我在您的课程中没有看到与消息或消息相关的任何其他内容
  • 道歉是的,它是为了打印所有学生,但我最初得到的是十六进制输出字符
  • 我已经更新了答案,你有不同的可能性,如果你在学生类中实现 toString 方法,你只需要在 for 循环中更改类型
【解决方案2】:

改变

for(String element : studentList)...

for(Student element : studentList)...

然后您需要决定在其中搜索什么

public void searchStudents(String searchString)

应该是 .name 还是 .studenId 并更改 if 语句以匹配它

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2016-01-30
    • 1970-01-01
    • 2018-03-29
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多