如何仅使用循环查找第二高分(无数组)

时间:2018-10-07 09:25:52

标签: java loops

所以基本上我只需要使用循环(无数组)来找到得分最高和第二高的学生。

我的代码是

    import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner myScanner= new Scanner(System.in);
        int k,max1, max2, grade,count,number;
        String student,grades;
        number= myScanner.nextInt();
        myScanner.nextLine();
        student= myScanner.nextLine();
        k= student.indexOf(' ');
        grades= student.substring(k+1);
        grade= Integer.parseInt(grades);
        count=0;
        max1= grade;
        max2= 0;

        while(count<number){
            student= myScanner.nextLine();
            k= student.indexOf(' ');
            grades= student.substring(k+1);
            grade= Integer.parseInt(grades);
            count++;
            if(grade==max1){
                max1= grade;
                max2= grade;
            }
            else if(grade>max1){
                max2= max1;
                max1= grade;
            }
            if(student.contains(max1+""))
                System.out.println(student);
            if(student.contains(max2+""))
                System.out.println(student);
        }
    }
}

我知道我的问题是“学生”只是暂时的,因此,我最终无法将其打印出来。我该怎么解决?

1 个答案:

答案 0 :(得分:0)

您可以存储最高成绩的student而不是存储最高成绩,因为如果您携带student字符串,则可以轻松找到成绩值。

public class Main{
    public static void main(String[] args){
        Scanner myScanner= new Scanner(System.in);
        int k,grade,count,number;
        String student,grades,maxStudent1,maxStudent2;
        number= myScanner.nextInt();
        myScanner.nextLine();
        student= myScanner.nextLine();

        count=0;
        maxStudent1= student;

        while(count<number){
            student= myScanner.nextLine();

            grade= getGrade(student);
            count++;
            if(grade >= getGrade(maxStudent1)) {
                maxStudent2= maxStudent1;
                maxStudent1= student;
            }
            else if(grade > getGrade(maxStudent2)) {
                maxStudent2= student;
            }
            if(student.equals(maxStudent1))
                System.out.println(student);
            if(student.equals(maxStudent2))
                System.out.println(student);
        }
    }

    private int getGrade(String student) {
        if(student == null) {
            return 0; 
        }
        int k = student.indexOf(' ');
        if(k==-1) {
            return 0;
        }
        String grades= student.substring(k+1);
        return Integer.parseInt(grades);
    }
}

此外,由于您的逻辑不正确,用于查找最高和第二最高成绩的逻辑已更新。例如,对于输入[10, 15, 12],您的代码将包含max1: 15max2: 10,而正确的max2: 12

或者,您不必每次都从student字符串中解析成绩,而是可以有两个额外的字符串maxStudent1maxStudent2以及max1和{{1} }与这些等级相对应的等级,以消除每次比较中字符串的解析。