Java 从用户输入字符串向数组添加数据

Java 从用户输入字符串向数组添加数据,java,arrays,Java,Arrays,我正在制作一个程序,该程序应该让用户输入一个字符串,其中包含一个学生的名字,后跟他们的测验、家庭作业和考试分数(用户输入决定每个学生的分数),然后获取每个数据并将其添加到数组中 我计划用4个不同的数组来实现这一点:1个用于名称,1个用于硬件分数,1个用于测验分数,1个用于考试分数 它的工作原理是为每个学生输入姓名,然后输入分数,每个分数前面都有字母,表示分数的类型。例如: Bob Jones: e100 e95 e87 q10 q10 q8 h10 h10 h10 Joe Smith: q10

我正在制作一个程序,该程序应该让用户输入一个字符串,其中包含一个学生的名字,后跟他们的测验、家庭作业和考试分数(用户输入决定每个学生的分数),然后获取每个数据并将其添加到数组中

我计划用4个不同的数组来实现这一点:1个用于名称,1个用于硬件分数,1个用于测验分数,1个用于考试分数

它的工作原理是为每个学生输入姓名,然后输入分数,每个分数前面都有字母,表示分数的类型。例如:

Bob Jones: e100 e95 e87 q10 q10 q8 h10 h10 h10
Joe Smith: q10 q10 h7 h10 h9 h10 e80
让程序将每个名称存储在一个数组中似乎很容易,但我正在努力编写代码,以便让它提取e100、e95等并将它们放入数组中,例如。到目前为止,我的代码显然不会这样做,而是设置为只按输入顺序向每个数组添加一个整数:

import java.util.Scanner;

public class GradeBook {

    public static void main(String[] args) {

        Scanner s = new Scanner (System.in);

        System.out.println("Welcome to GradeBook!");
        System.out.println("Please provide grade item details");

        System.out.print("Exams (number, points, weight): ");
        int numExam = s.nextInt();
        int examPoints = s.nextInt();
        int examWeight = s.nextInt();

        System.out.print("Quizzes (number, points, weight): ");
        int numQuiz = s.nextInt();
        int quizPoints = s.nextInt();
        int quizWeight = s.nextInt();

        System.out.print("Homework (number, points, weight): ");
        int numHomework = s.nextInt();
        int homePoints = s.nextInt();
        int homeWeight = s.nextInt();

        System.out.println("------------------");

        String names[] = new String [200];
        int examScores[] = new int [200 * numExam];
        int quizScores[] = new int [200 * numQuiz];
        int homeworkScores[] = new int [200 * numHomework];

        int students = 0;
        int e = 0;
        int h = 0;
        int q = 0;


    for (;;){


        System.out.println("What would you like to do?");
        System.out.println("1 Add student data");
        System.out.println("2 Display student grades & statistics");
        System.out.println("3 Plot grade distribution");
        System.out.println("4 Quit");

        int input = s.nextInt();
        s.nextLine();

        if(input == 1){

            for(int i = 0; i <= students;){
                for (boolean done = false;done = true;){
                    System.out.println("Enter student data: ");
                    System.out.print("data>");
                    names[i] = s.next();
                    examScores[e] = s.nextInt(); 
                    quizScores[q] = s.nextInt();
                    homeworkScores[h] = s.nextInt();
import java.util.Scanner;
公共班级成绩册{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
System.out.println(“欢迎来到成绩册!”);
System.out.println(“请提供等级项目详细信息”);
系统输出打印(“考试(数字、分数、重量):”;
int numExam=s.nextInt();
int examploints=s.nextInt();
int examWeight=s.nextInt();
系统输出打印(“测验(数字、分数、重量):”;
int numQuiz=s.nextInt();
int quizPoints=s.nextInt();
int quizWeight=s.nextInt();
系统输出打印(“家庭作业(数字、分数、重量):”;
int numHomework=s.nextInt();
int homePoints=s.nextInt();
int homewweight=s.nextInt();
System.out.println(“------------------------”;
字符串名称[]=新字符串[200];
int examcores[]=新int[200*numExam];
int quizScores[]=新int[200*numQuiz];
int homeworkScores[]=新int[200*numhomeworks];
int学生=0;
int e=0;
int h=0;
int q=0;
对于(;;){
System.out.println(“您想做什么?”);
System.out.println(“1添加学生数据”);
System.out.println(“2显示学生成绩和统计数据”);
System.out.println(“3地块等级分布”);
System.out.println(“4退出”);
int input=s.nextInt();
s、 nextLine();
如果(输入=1){
对于(int i=0;i如果输入为

Bob Jones: e100 e95 e87 q10 q10 q8 h10 h10 h10
您可以通过以下方式进行恢复:

names[i] = s.next();
examScores[e] = s.nextInt(); 
quizScores[q] = s.nextInt();
homeworkScores[h] = s.nextInt();
它永远不会起作用…在您的示例中,分数不是整数(它们是字符串),您必须解析字符串并拆分它:

String readString = s.next(); // "e99"
char type = readString.charAt(0); // "e"
String sScore = readString.substring(1); // "99"
int score = Integer.valueOf(sScore);  // 99
[上述代码尚未测试]

(见附件)

一般来说,您的代码很难理解,我认为它在这个问题上是不完整的

  • 尝试使用方法和注释关键行
  • 用一个常数表示200(我想是学生人数)
  • 创建对象(学生、分数等)
  • 使用java对象(哈希映射、列表等)
  • 使用switch/case代替if(输入==1)

祝你好运!开始编程可能很困难,但很快就会令人惊奇。

你可以尝试将用户输入存储为字符串,然后使用split(),但我认为使用StringTokenizer解析学生姓名和分数会更好:

将学生姓名与分数分开后,可以检查每个分数的第一个字符;如果该字符是“e”,则将数字部分添加到考试数组;如果是“q”,则添加到测验数组;“h”进入家庭作业数组

一些一般性建议:

我建议您启用该程序,以保持逐行输入学生数据,直到用户输入“END”或其他关键字

在设置数组的方式中,无法判断哪个学生获得了什么分数。您需要能够对程序的其他部分进行设置。我建议创建一个学生类,将每个学生作为对象,并将分数记录为int数组

您可以将学生数据信息存储在hashmap中,但我认为使用数组更适合您的级别

一旦设置了学生类,就可以创建学生数组(称之为“教室”或类似的东西)。此教室数组的最大大小为200或任意最大学生数。无论何时为新学生添加分数,都应向教室数组添加相应的学生对象,并记录其学生ID。添加的第一个学生ID为1,第二个学生ID为2,依此类推上。这只是为了方便您为现有学生添加更多分数。您必须以不同方式解析用户输入以解决此更改

学生数据的用户输入现在可以采用以下形式:

  • [学生姓名]:[分数1,分数2,…]

  • [学生ID]:[分数1,分数2,…]

例如:

(首次输入学生数据)

(用户按ENTER键)

>Bob Jones有学生ID 1。输入更多学生数据或“结束”

然后,如果你想给一个已经存在的学生增加更多的分数,你可以使用他们的学生ID引用他们,这样

1: e90 h7 q8 q9 h10
将这些分数添加到studentID为1的学生,即Bob Jones。由于数组从0开始,每个学生的学生ID将比数组中的索引多1(学生1将位于索引0,学生2将位于索引1,等等)。另一个(更复杂,效率更低)方法是对照数组中的每个元素检查学生名,如果学生已经存在,则添加更多分数,如果不存在,则添加新的学生对象

由于无法更改数组的大小,如果您将分数作为学生类的变量来实现,则在向用户询问每个学生的考试、测验和家庭作业总数时,可能会遇到问题。您应该查看
Joe Smith: q10 q10 h7 h10 h9 h10 e80
1: e90 h7 q8 q9 h10