Java 单扫描器STARTION要求用户重复输入,以便使用比较器接口对集合进行排序

Java 单扫描器STARTION要求用户重复输入,以便使用比较器接口对集合进行排序,java,collections,java.util.scanner,comparator,Java,Collections,Java.util.scanner,Comparator,在下面的代码中,scanner语句多次请求用户输入,然后才能进行排序 如果有n个元素需要排序,它会要求用户输入n-1次,我已经尝试过调试,但找不到正确的原因 package com.sort.ComparableAndComparator; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Student

在下面的代码中,scanner语句多次请求用户输入,然后才能进行排序

如果有n个元素需要排序,它会要求用户输入n-1次,我已经尝试过调试,但找不到正确的原因

package com.sort.ComparableAndComparator;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Student implements Comparable<Student> {
    private int id,score;
    private String firstname,lastname;
    Scanner scan=new Scanner(System.in);

    public Student(int id,int score,String firstname ,String lastname){
        this.id=id;
        this.score=score;
        this.firstname=firstname;
        this.lastname=lastname;
    }
    //getters and setters
    public int getId() {return id;}

    public void setId(int id) {this.id = id;}

    public int getScore() {return score;}

    public void setScore(int score) {this.score = score;}

    public String getFirstname() {return firstname;}

    public void setFirstname(String firstname) {this.firstname = firstname;}

    public String getLastname() {return lastname;}

    public void setLastname(String lastname) {this.lastname = lastname;}


    @Override
    public int compareTo(Student studentObj) {
        //user input
        System.out.println("1:sortby ID 2:sortby SCORE 3:sortby FIRSTNAME 4:sortby LASTNAME");
        int input=scan.nextInt();
        //switch statement
        switch(input){
        case 1:System.out.println("comapring ids");
        if(this.getId()<studentObj.getId()){
            System.out.println("comparing "+this.getId()+" "+studentObj.getId());
            return -1;
        }else if(this.getId()>studentObj.getId()){
            System.out.println("comparing "+this.getId()+" "+studentObj.getId());
            return 1;
        }else
            return 0;

        case 2:System.out.println("comapring scores");
        if(this.getScore()<studentObj.getScore()){
            return -1;
        }else if(this.getScore()>studentObj.getScore()){
            return 1;
        }else
            return 0;

        case 3:System.out.println("comapring firstname");
        if(this.getFirstname().compareTo(studentObj.getFirstname())<0){
            return -1;
        }else if(this.getFirstname().compareTo(studentObj.getFirstname())>0){
            return 1;
        }else
            return 0;

        case 4:System.out.println("comapring lastname");
        if(this.getLastname().compareTo(studentObj.getLastname())<0){
            return -1;
        }else if(this.getLastname().compareTo(studentObj.getLastname())>0){
            return 1;
        }else
            return 0;

        default:System.out.println("no correct input selected!!!");
        return 0;
        }
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", score=" + score + ", firstname="
                + firstname + ", lastname=" + lastname +"]"+"---";
    }
    public static void main(String[] args) {
        List<Student> studentList=new ArrayList<Student>();
        studentList.add(new Student(1,42,"john","b"));
        studentList.add(new Student(2,52,"bob","e"));
        studentList.add(new Student(5,44,"christian","g"));
        studentList.add(new Student(7,44,"jerry","j"));
        System.out.println("Sortinng!!!");
        Collections.sort(studentList);
        System.out.println("sorting completed!!");
        System.out.println(studentList+"\n");
    }

}
package com.sort.ComparableAndComparator;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
导入java.util.Scanner;
公立班学生实行可比性{
私有int-id,score;
私有字符串firstname,lastname;
扫描仪扫描=新扫描仪(System.in);
公立学生(整数id、整数分数、字符串名、字符串名){
这个.id=id;
这个。分数=分数;
this.firstname=firstname;
this.lastname=lastname;
}
//接球手和接球手
public int getId(){return id;}
public void setId(int id){this.id=id;}
public int getScore(){return score;}
public void setScore(int score){this.score=score;}
公共字符串getFirstname(){return firstname;}
public void setFirstname(字符串firstname){this.firstname=firstname;}
公共字符串getLastname(){return lastname;}
public void setLastname(字符串lastname){this.lastname=lastname;}
@凌驾
公共国际比较(学生北京){
//用户输入
System.out.println(“1:sortby ID 2:sortby SCORE 3:sortby FIRSTNAME 4:sortby LASTNAME”);
int input=scan.nextInt();
//开关语句
开关(输入){
案例1:System.out.println(“comapring ID”);
if(this.getId()studentObj.getId()){
System.out.println(“比较”+this.getId()+“”+studentObj.getId());
返回1;
}否则
返回0;
案例2:System.out.println(“comapring分数”);
if(this.getScore()studentObj.getScore()){
返回1;
}否则
返回0;
案例3:System.out.println(“comapring firstname”);
if(this.getFirstname().compareTo(studentObj.getFirstname())0){
返回1;
}否则
返回0;
案例4:System.out.println(“comapring lastname”);
if(this.getLastname().compareTo(studentObj.getLastname())0){
返回1;
}否则
返回0;
默认值:System.out.println(“未选择正确的输入!!!”;
返回0;
}
}
@凌驾
公共字符串toString(){
return“Student[id=“+id+”,score=“+score+”,firstname=”
+firstname+”,lastname=“+lastname+”]“+”--”;
}
公共静态void main(字符串[]args){
List studentList=new ArrayList();
学生名单。加上(新学生(1,42,“约翰”,“b”);
添加(新学生(2,52,“鲍勃”,“e”);
新增(新学生(5,44,“基督徒”,“g”);
学生名单。新增(新生(7,44,“jerry”,“j”);
System.out.println(“排序!!!”;
集合。排序(学生列表);
System.out.println(“排序完成!!”;
System.out.println(studentList+“\n”);
}
}

您的问题陈述中缺少预期的行为。@mattias,您能告诉我哪里出了问题吗?与其查看代码并试图理解它应该做什么,而不是在没有异常、空指针等情况下它正在做什么,不如得到如下清晰的问题陈述:“你好,我有密码。当我输入2时,我希望输出应该是5,但输出是4。为什么?”