【问题标题】:New variable for each user input in a loop循环中每个用户输入的新变量
【发布时间】:2016-02-06 22:55:37
【问题描述】:

我目前正在开发一个程序,该程序接受用户输入的班级学生人数,然后(在 while 循环中)接受用户输入的学生人数和他们的平均成绩,然后经过计算, 打印班级的最高分、最低分和平均分。

这是我到目前为止所做的:

import java.util.Scanner;
public class ClassMarks {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter number of students in class: ");
        int students = input.nextInt();
        int x = students;
        while (x > 0) {
            System.out.println("Enter student number: ");
            double studentNumber = input.nextDouble();
            System.out.println("Enter student grade: ");
            double studentGrade = input.nextDouble();
            x = x - 1;
        }
    }
}

我正在寻找一种方法让程序为我创建一个新变量,该变量将每个新用户输入的学生成绩存储在 while 循环中。 例如)studentGrade1、studentGrade2、studentGrade3 ...

【问题讨论】:

  • 将它们存储在一个列表中。
  • 列表对于指定的要求不是必需的。
  • @radoh +1 实际上,不需要存储。 OP还可以保留最高分、最低分和总分。
  • @ArnaudDenoyelle 是的,我刚刚添加了这样的答案/建议

标签: java arrays arraylist input user-input


【解决方案1】:

while 循环之前,创建变量最高/最低等级

double highestGrade = Double.MIN_VALUE, lowestGrade = Double.MAX_VALUE;
double gradeSum = 0; 

然后,当您循环遍历这些值时,适当地调整变量,例如

if (studentGrade > highestGrade)
    highestGrade = studentGrade;
if (studentGrade < lowestGrade)
    lowestGrade = studentGrade;
gradeSum += studentGrade;

然后在循环结束后,得到这样的平均值

double averageGrade = gradeSum / students;

【讨论】:

  • highestGrade = Math.max(studentGrade, highestGrade) 会更好:) lowestGrade 相同。
  • 更好,没错,但这意味着在每个循环中重写变量,即使值没有改变。嗯,进退两难... :)
  • Ohhhhh... 你说得对,不需要列表。谢谢!
【解决方案2】:

如何使用列表。

List<Student> students = new ArrayList<>()

在while循环中

创建一个学生更新其字段,然后将其添加到列表中

Student myNewStudent = new Student();
// update fields 

students.add(myNewStudent);

要迭代列表,您可以使用 for 循环。

for (Student s : students) { 
    // Get student info
}

将其应用到您的代码中:

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

public class ClassMarks {
// Create an inner class Student

    public static class Student {

        public double studentNumber;
        public double studentGrade;
    }

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter number of students in class: ");
        int students = input.nextInt();
        int x = students;

        // Create a list to hold your students
        List<Student> studentsList = new ArrayList<>();

        while (x > 0) {
            Student myNewStudent = new Student();
            System.out.println("Enter student number: ");
            myNewStudent.studentNumber = input.nextDouble();
            System.out.println("Enter student grade: ");
            myNewStudent.studentGrade = input.nextDouble();

            // update fields 
            studentsList.add(myNewStudent);

            x = x - 1;
        }

        // Loop your student List
        for (Student s : studentsList) {
            // Get student info
            System.out.println("Student number is: "+s.studentNumber+" grade is : "+s.studentGrade);
        }
    }
}

【讨论】:

  • 例如,当我需要计算平均成绩时,我将如何参考变量?
  • 所有学生都将在“学生”列表中。您可以将它们称为例如 student.get(0)
  • @ScopeY for (Student s : students) { (do something here) }
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多