Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。

4年前关闭。





public class Exercise_09 {

   public static void main(String[] args) {

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

    String topSName = null;
    double topSScore = 0;
    String secondSName = null;
    double secondSScore = 0;

    for (int i = 0; i < studentCount; i++) {
        System.out.print("Enter name for student #" + (i + 1) + ": ");
        String s = input.next();

        System.out.print("Enter score for student #" + (i + 1) + ": ");
        double score = input.nextDouble();

        if (score > topSScore) {
            if (topSName != null) {
                secondSName = topSName;
                secondSScore = topSScore;
            }
            topSName = s;
            topSScore = score;
        } else if (score > secondSScore) {
            secondSName = s;
            secondSScore = score;
        }

    }
    System.out.println("Top student " + topSName + "'s score is " + topSScore);
    System.out.println("Second top student " + secondSName + "'s score is " + secondSScore);
}


}

好的,我得到了这段代码,它的作用是询问学生人数,他们的姓名和分数,并显示最高和第二高的分数。

现在我的问题是,当我重复询问学生姓名和分数时,输入内容如何保存所有分数和姓名的记录,我怎么称呼它?如果语句逻辑在做什么呢?我没有得到那部分。

最佳答案

这是您的if statements在for循环中所做的事情。


但是在First Initialize变量之前:topScore = 0; secondSScore= 0;(最低)。(我的建议:将其初始化为-1)。
内部循环:(现在,您的逻辑分为两个主要部分)


第一次迭代


获得学生分数。
如果score is greater than topScore then assign topScore the value of score.




(现在,在“第一次迭代”中,第一个学生的分数被设置为topScore,第二个也被设置为topScore(secondSScore))。

为什么?...因为topScore的值被初始化为小于第一个学生的分数的0(仅当第一个学生的分数未为零时)。到目前为止,这告诉我们根据接收到的数据,这是最高得分以及第二个topScore。(很合逻辑..)

 // First iteration
 if (score > topSScore) {  // topSScore = 0
            topSName = s;
            topSScore = score;
        } else if (score > secondSScore) { //secondSScore = 0
            secondSName = s;
            secondSScore = score;
        }



其余的迭代


现在在进一步迭代中,如果任何学生的分数大于新的topScore,则

首先分配secondSScore the value of topSScore

      if (topSName != null) {
            secondSName = topSName;
            secondSScore = topSScore;
      }


然后为topSSCore分配学生分数的值,依此类推.... phew

希望我能解释清楚。

从给定数据(通常是数组)中查找最大和第二大的值。

这是一些类似的例子:


Finding-the-second-highest-number-in-array
Find two-max-numbers-in-array

关于java - 当我们反复请求循环时如何存储输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34469121/

10-16 17:37