【问题标题】:Java - record multiple user inputs per another inputJava - 每个输入记录多个用户输入
【发布时间】:2019-09-29 10:14:09
【问题描述】:

此程序应要求提供学生姓名。然后,对于每个学生,将记录四个成绩。然后再次迭代,直到用户输入“C”退出循环。然后打印结果。 它只显示最后输入的四个元素。我认为我的 for 循环不会完成我想要的。我可能需要 .forEach 吗?在此之后,我还必须分别总结每个学生的每四个数字。每个学生必须有不同的数组列表吗? 到目前为止,这是我所拥有的:

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

public class TestGrades {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
ArrayList<String> studentName = new ArrayList<String>(); 
boolean loop = true;
while (loop) {
  System.out.println(" Please Enter Student Name");
  sc.nextLine();

      String student = sc.nextLine();

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


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

        Double grade = sc.nextDouble();
        studentGrade.add(grade);  
    }    
    System.out.println(studentName);
    System.out.print(studentGrade);
    }
}
}

我想按输入顺序打印每个 arrayList 的元素,首先是 studentName,然后是 studentGrade。 .forEach 有帮助吗?

【问题讨论】:

  • 为什么不创建一个包含 his/her 标记数组的 Student 类?这样您就可以拥有一个List&lt;Student&gt;,您需要的所有信息都将包含在该集合中..
  • 我需要总结每个学生的所有双精度值(成绩),而不是总结学生的姓名。除非你的意思是我可以在 arrayList 中创建一个数组?我不确定它是如何工作的
  • 好的,那么在Student 类中,您可以拥有一个名为sumOfMarks 的属性,而不是标记数组。

标签: java loops foreach record prompt


【解决方案1】:

对于初学者,我建议使用Console 类获取用户输入。 另外:

  1. 您第一次拨打sc.nextLine() 时,您会收到来自 用户并且从不存储它。
  2. 你应该初始化你的ArrayList&lt;Double&gt; studentGrade 循环。每次您循环输入时,它都会创建一个 新列表,您正在失去以前的学生成绩 循环。

运行这个,如果你必须再次更改为Scanner,请使用Scanner

import java.util.Scanner;
import java.util.ArrayList;
import java.io.Console;

public class Test {

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);
  }
}
}

【讨论】:

  • Themelis- 这看起来很棒,我理解反馈。它说Test类必须在它自己的文件中定义,所以我把它改回TestGrades。我还删除了代码末尾的“```”,因为它会导致错误。但是现在当我运行它时,它立即崩溃:线程“main”中的异常 java.lang.NullPointerException
  • 文件名和类名必须相同。例如,将您的文件重命名为 Test.java,并将类命名为 Test(或您喜欢的任何名称)。
  • 是的,这不是问题。我把Test改回TestGrades。我提到了我现在面临的问题。
  • 对我来说它正在工作。我还对代码进行了编辑并删除了“```”。创建一个 Test.java 文件,粘贴上面的代码并执行它。请问您是使用控制台运行代码还是使用 Eclipse 之类的 IDE?
  • 这可能是问题所在。我正在运行 Eclipse
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2020-02-21
  • 2023-04-06
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多