所以基本上我只需要使用循环(无数组)来找到得分最高和第二高的学生。
我的代码是
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);
}
}
}
我知道我的问题是“学生”只是暂时的,因此,我最终无法将其打印出来。我该怎么解决?
答案 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: 15
和max2: 10
,而正确的max2: 12
。
或者,您不必每次都从student
字符串中解析成绩,而是可以有两个额外的字符串maxStudent1
和maxStudent2
以及max1
和{{1} }与这些等级相对应的等级,以消除每次比较中字符串的解析。