如何在控制台中输入人员名称并获取人员数组索引

时间:2019-07-16 21:24:27

标签: java

我试图通过在控制台中键入人员名称来获得人员在阵列中的位置。

public static void main(String[] args) {
    Students[] student = new Students[50];

    student[0] = new Students("Helen", "Jones", 10);
    student[1] = new Students("Fred ", "Smith", 15);
    student[2] = new Students("George", "Evans", 25);
    student[3] = new Students("Malcolm", "Evans", 30);


    Scanner userInput = new Scanner(System.in);
    System.out.println("Enter Forename");
    String name = userInput.nextLine();
    Arrays.asList(student).indexOf(name);

我希望能够在控制台中输入一个名称,然后它将显示人员在数组中的位置。 请提供任何形式的帮助。 谢谢

3 个答案:

答案 0 :(得分:0)

您需要遍历每个列表并对照对象名称检查名称,或过滤列表并获取匹配的对象。

int index= -1
for(int i =0;i<students.length();i++){
    if(students[i].getFirstName().compareToIgnoreCase(name)){
         index = i;
    }
} 
if(index<>-1){
    //name was found do something
 }

答案 1 :(得分:0)

如果您不受限于使用数组,则可以使用映射代替对象来存储对象。使用名称作为关键字,使用学生对象作为关键字。与将对象存储在数组中并对其进行循环搜索匹配的名称相比,这将是更快的查找。

HashMap<String, Students> map = new HashMap<>();
map.put("Helen", new Students("Helen", "Jones", 10));
map.put("Fred", new Students("Fred", "Smith", 15));
...

Scanner userInput = new Scanner(System.in);
System.out.println("Enter Forename");
String name = userInput.nextLine();

Students studentToFind;
if(map.contains(name))
{
   studentToFind = map.get(name);
   //do stuff with the student
}
else
{
   System.out.println("No student with name " + name + " was found");
}

答案 2 :(得分:0)

我想我可能会解决您的问题

这是您的代码

...
System.out.println("Enter Forename");
String name = userInput.nextLine();
println(Arrays.asList(student).indexOf(name));

您应该将其更改为

...
HashMap<Name, Student> studentz = new HashMap<>();
System.out.println("Enter Firstname");
String name = userInput.nextLine();
Arrays.asList(student).indexOf(studentz.get(codeIsIn));

问题是您试图查找字符串NAME的索引,而不是对象字符串的索引在

如果您要获取最后的对象,请使用

...
println(studentz.get(codeIsIn))

顺便说一下,将Name替换为“ Helen”的任何属性名称 而且,您没有将其打印到控制台上