#java #loops #do-while
Вопрос:
Я работаю над программой, которая запрашивает у пользователя неопределенное количество имен учащихся и количество оценок. Предполагается, что программа перестанет запрашивать у пользователя ввод, когда пользователь вводит -1. Как только это произойдет, отобразится отчет об оценках, показывающий оценку каждого ученика, количество баллов mimimum, максимальное количество баллов и среднее значение.
Вот пример того, как это должно выглядеть:
Enter the student's name or [-1] to quit: Victoria T.
Enter the student's grade or [-1] to quit: 88
Enter the student's name or [-1] to quit: Jared S.
Enter the student's grade or [-1] to quit: 93
Enter the student's name or [-1] to quit: Jaheem
Enter the student's grade or [-1] to quit: 75
Enter the student's name or [-1] to quit: -1
Class Grading Report
Victoria T.: B
Jared S.: A
Jaheem: C
Minimum: 75.0
Maximum: 93.0
Average: 64.0
До сих пор я выяснял, как собирать входные данные с помощью цикла do-while, но теперь я пытаюсь понять, как распечатать все введенные данные. Я знаю, что есть и другие факторы, такие как вычисление максимального и минимального чисел, а также преобразование числовых оценок в буквенные, но я просто хочу выяснить, как распечатать вводимые данные.
Вот мой код до сих пор:
import java.util.*;
public class CreateGradeReport {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String studentName = "";
int studentGrade = 0;
do {
System.out.print("nEnter the student's name or [-1] to quit: ");
studentName = input.nextLine();
if (studentName.equals("-1")){
break;
}
System.out.print("nEnter the student's grade or [-1] to quit: ");
studentGrade = input.nextInt();
if(studentGrade == -1){
break;
}
String dummy = input.nextLine();
}
while(!studentName.equals("-1") amp;amp; studentGrade != -1);
}
}
Любая помощь в этом будет весьма признательна. Спасибо.
Комментарии:
1. Вы должны быть в состоянии использовать
System.out.print
/println
точно так же, как вы делаете для приглашения. Возможно, с помощью aString.format
для управления форматированием выходных данных.
Ответ №1:
Сначала вам нужно будет сохранить введенные данные в подходящей структуре данных. Вы можете создать отдельный класс, содержащий поля для имени и оценки учащегося следующим образом:
public class StudentDetails {
public String studentName;
public int studentGrade;
public StudentDetails (String studentName , int studentGrade){
this.studentName = studentName;
this.studentGrade = studentGrade;
}
}
Тогда вы, возможно, сможете использовать список массивов этого объекта, чтобы сохранить все ваши данные таким образом:
import java.util.*;
public class CreateGradeReport {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String studentName = "";
int studentGrade = 0;
public ArrayList<StudentDetails> studentsDetailsList= new ArrayList<>();
do {
System.out.print("nEnter the student's name or [-1] to quit: ");
studentName = input.nextLine();
if (studentName.equals("-1")){
break;
}
System.out.print("nEnter the student's grade or [-1] to quit: ");
studentGrade = input.nextInt();
if(studentGrade == -1){
break;
}
// Add your data by invoking the constructor of your newly created
// class above and add it to the list.
studentsDetailsList.add(new StudentDetails(studentName, studentGrade));
String dummy = input.nextLine();
}
while(!studentName.equals("-1") amp;amp; studentGrade != -1);
}
// Print your data from this list
for(StudentDetails sd : studentsDetailsList){
System.out.println(sd.studentName ", " sd.studentGrade);
}
}
Счастливого кодирования!
Комментарии:
1. Есть ли способ сделать это без использования списка массивов или отдельного класса?