-1

私は、ユーザーが生徒の名前と点数を入力するプログラムを完成させる任務を負っています。最終的に、プログラムは最高得点の 2 人の学生を出力するはずですが、私は最高得点の学生しか出力できません。

public class StudentScores
{
public static void main(String[] args) 
{
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the number of students: ");
    int numStudents = input.nextInt();
    System.out.print("Enter the student's name: ");
    String Student1 = input.next();
    System.out.print("Enter the student's score: ");
    int Score1 = input.nextInt();

    for (int i = 0; i < numStudents - 1; i++) 
    {
        System.out.print("Enter the student's name: ");
        String Student = input.next();
        System.out.print("Enter the student's score: ");
        int Score = input.nextInt();

        if (Score > Score1) 
        {
            Student1 = Student;
            Score1 = Score;
        }
    }
    System.out.println(Student1 + "'s score is " + Score1);
}}

私が確信が持てないのは、ユーザー入力に基づいて Student2 と Score 2 を混在させる方法を理解する方法です。配列を使用したいのですが、ループを使用する必要があるため、ここで困惑しています。

4

8 に答える 8

3
if (Score > Score1) 
{
    Student2 = Student1;
    Score2 = Score1;
    Student1 = Student;
    Score1 = Score;
}
else if (Score > Score2)
{
    Student2 = Student;
    Score2 = Score;
}
于 2013-02-25T23:13:09.327 に答える
1

JavaでArrays.sort()メソッドを使用できます。それを行う適切な方法は、名前とスコアを持つ「Student」オブジェクトを作成することです。次のようになります。

public class Student implements Comparable {
     private int score;
     private String name;

     public Student(String name, int score)
     { // Constructor Code }

オブジェクトにComparableインターフェースを実装させます。これは、 compareメソッドを作成することを意味します。Studentの配列を並べ替えたら、配列の上位2つの名前を出力します。

于 2013-02-25T23:13:00.590 に答える
1

生徒を配列に格納し、配列を並べ替えて最初の 2 つを返すことができます。

または、最高の 2 つのスコアのみを保存する場合は、ネストされたコンパレータが必要になります。

if (score > score2) {
    if (score > score1) {
        student2 = student1;
        score2 = score1;
        student1 = student;
        score1 = score;
    } else {
        student2 = student;
        score2 = score;
    }
}
于 2013-02-25T23:08:35.543 に答える
1

2 番目の生徒を追跡するには、変数Student2の別のペアが必要になります。Score2両方のスコアを最小値よりも低い値に初期化できます (たとえば、スコアの範囲が 0 から 10 の場合、-1 で初期化できます)。

String Student1 = "none", Student2 = "none";
int Score1 = -1, Score2 = -1;


for (int i = 0; i < numStudents; i++) 
{
    System.out.print("Enter the student's name: ");
    String Student = input.next();
    System.out.print("Enter the student's score: ");
    int Score = input.nextInt();

 if (Score > Score1) 
    {
        Student2 = Student1;
        Score2   = Score1;
        Student1 = Student;
        Score1   = Score;
    }
    else if (Score > Score2) {            
        Student2 = Student;
        Score2   = Score;
    }
}
于 2013-02-25T23:11:33.883 に答える
1

並べ替えを簡単にするために (これは生徒の数に関係なく機能します) Student、スコアと を実装する名前の両方をクラスで処理することをお勧めしますComparable<Student>。次に、 のスコアが のスコアよりも大きい場合は1 を返し、等しい場合は 0 を返し、そうでない場合は -1compareTo(Student student)を返すメソッドを作成する必要があります。次に、 (for 、つまり) とを使用できます。thisstudentCollections.sort()CollectionsArrayListArrays.sort()

于 2013-02-25T23:19:33.740 に答える
1

ここでは、キーの自然な順序に従ってソートされているATreeMap<Integer, String>が役立ちます。

TreeMap<Integer, String> map = new TreeMap<Integer, String>();

Scanner input = new Scanner(System.in);
System.out.print("Enter the number of students: ");
int numStudents = input.nextInt();

for (int i = 0; i < numStudents; i++) {
    System.out.print("Enter the student's name: ");
    String Student = input.next();
    System.out.print("Enter the student's score: ");
    int Score = input.nextInt();
    map.put(Score, Student);
}

Map.Entry<Integer, String> entry1 = map.pollLastEntry();
Map.Entry<Integer, String> entry2 = map.pollLastEntry();
System.out.println("Highest score: " + entry1.getKey());
System.out.println("Highest scorer: " + entry1.getValue());
System.out.println("Second highest score: " + entry2.getKey());
System.out.println("Second highest scorer: " + entry2.getValue());

このアプローチを使用すると、3 番目、4 番目などの最高スコア/得点者を見つけるのがはるかに簡単になります。

于 2013-02-25T23:19:52.380 に答える
0
package deneme;

import java.util.Scanner;

public class HighestTwoScore {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner input = new Scanner(System.in);

        System.out.print("Enter the number of student: ");
        int numberOfStudents = input.nextInt();

        System.out.print("Enter the Students name and score: ");
        String name1 = input.next();
        int score1 = input.nextInt();

        System.out.print("Enter the Students name and score: ");
        String name2 = input.next();
        int score2 = input.nextInt();

        int controlScore = score1;
        String controlName = name1;
        if (score1 < score2) {
            score1 = score2;
            score2 = controlScore;
            name1 = name2;
            name2 = controlName;
        }

        int i = 0;
        while (i < numberOfStudents - 2) {
            System.out.print("Enter the Students name and score: ");
            String name = input.next();
            int score = input.nextInt();

            if (score > score1) {
                score2 = score1;
                name2 = name1;
                score1 = score;
                name1 = name;

            } else if (score > score2) {
                score2 = score;
                name2 = name;
            }

            i++;
        }
        System.out.println("Top student1 " + name1 + "'s score is " + score1);
        System.out.println("Top student2 " + name2 + "'s score is " + score2);
    }

}
于 2014-05-23T20:10:48.567 に答える
0
import java.util.Scanner;

public class TwoLargestNumbers{

    public static void main(String[] args) {
        System.out.println("Enter number: ");

        Scanner input = new Scanner(System.in);

        int firstLarge = 0, secondLarge = 0;

        for (int i = 1; i <= 10; i++) {
            int num = input.nextInt();

            if (num >= firstLarge) {
                secondLarge = firstLarge;
                firstLarge = num;
            }

            if (num > secondLarge && num < firstLarge)
                secondLarge = num;

        }

        System.out.println("First large number is: " + firstLarge);
        System.out.print("Second large number is: " + secondLarge);
    }
}
于 2016-02-05T19:14:13.743 に答える