Java - принятие пользовательского ввода для создания неизвестного числа объектов класса / массивов / массивов списков - PullRequest
1 голос
/ 30 сентября 2019

Мне нужно разрешить пользователю вводить любое количество студентов. Они нажимают «С», чтобы закончить ввод данных. Я подумывал сделать урок для ученика (мой код в настоящее время не отражает этого) и 4 предмета на ученика. Каждый набор из 4 объектов - это числовые оценки, которые будут суммироваться и усредняться.

Я уже пытался использовать цикл while, создавая arrayLists, и я изучил карты. Каждый набор из 4 оценок соответствует учащемуся и должен суммироваться и усредняться отдельно.

package arrayList;
import java.util.Scanner;
import java.util.ArrayList;

public class TestGrades {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<String> studentName = new ArrayList<String>(); 
ArrayList<Double> studentGrade = new ArrayList<Double>();
boolean loop = true;

while (loop) {

    System.out.println(" Please Enter Student Name");
    String student = scanner.nextLine();

        if(student.equals("C"))
        {
          break;    
        }
        else
        {
          studentName.add(student);
        }


    System.out.println("Please enter Student Grade");
    for (int j = 0; j < 4; j++) {

        Double grade = Double.parseDouble(scanner.nextLine());
        studentGrade.add(grade);  
    }    

    System.out.println(studentName);
    System.out.print(studentGrade);
    }
}
}

Проблема здесь действительно в том, что у меня есть все введенные числа в одном arrayList, и я не знаю, могу ли я автоматическисоздайте новый arrayList каждый раз, когда они вводят нового студента. Каждый массив arrayList в идеале должен содержать только 4 двойных значения.

1 Ответ

0 голосов
/ 30 сентября 2019

Ну, пожалуйста, учтите, что оценки относятся к ученику и ограничены всегда 4. Поэтому я предлагаю реализовать динамический список учеников класса с приложенным массивом оценок.

Пример:

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

public class TestGrades {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);
ArrayList<Student> studlist = new ArrayList<Student>(); 

boolean loop = true;
while (loop) {

    System.out.println(" Please Enter Student Name");
    String scanedline = scanner.nextLine();

        if(scanedline.equals("C"))
        {
          break;    
        }
        else
        {
          studlist.add(new Student(scanedline));
        }


    System.out.println("Please enter Student Grade");
        for (int j = 0; j < 4; j++)
        {
    System.out.print(""+j+">");
        Double scannedgrade = Double.parseDouble(scanner.nextLine());
        studlist.get(studlist.size() - 1).grade[j]=scannedgrade;
        }    

    System.out.println(studlist.get(studlist.size() - 1).name);
    for (int j = 0; j < 4; j++)
        System.out.print(studlist.get(studlist.size() - 1).grade[j] + " ");
    System.out.println("");
    }
}

private static class Student 
{
    String name;
    Double [] grade;

    Student (String s)
    {
        this.name = s;
        grade = new Double[4];
    }

}

}
...