[英]Adding data to array from user input String
我正在制作一个程序,该程序应该让用户输入一个包含学生姓名的字符串,然后是他们的测验,家庭作业和考试成绩(用户输入确定每个学生有多少个),并获取每个数据并将其添加到一个数组。
我正打算通过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等并将其放入exams数组中的代码。 到目前为止,我所拥有的代码显然不会这样做,而是将其设置为仅按输入顺序在每个数组中添加一个整数:
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();
edit1:权重
这是用户在程序开始时输入“成绩项目详细信息”的方式:
考试(人数,分数,体重):3 100 60(用户按Enter键)
测验(数字,分数,重量):3 10 20(用户按Enter)
作业(数字,分数,重量):3 10 20(用户按Enter键)
第一个数字是课程中考试/测验/家庭作业的数量,第二个数字是每个考试/测验/家庭作业的最高分,第三个数字是期末考试/测验/家庭作业的权重。
您可以尝试将用户输入存储为字符串,然后使用split(),但是我认为使用StringTokenizer解析学生姓名和分数会更好: https : //docs.oracle.com/javase/7/docs/api /java/util/StringTokenizer.html
将学生姓名与分数分开后,您可以检查每个分数的第一个字符; 如果字符是“ e”,则将数字部分添加到exams数组中; 如果是“ q”,则添加到测验数组中; “ h”转到作业数组。
一些一般性建议:
我建议您使该程序保持一行一行地输入学生数据,直到用户输入“ END”或其他关键字。
建立数组的方式无法告诉哪个学生获得了什么分数。 您将需要能够对程序的其他部分执行此操作。 我建议创建一个Student类,将每个学生作为对象,并将分数记录为int数组。
您可以将学生数据信息存储在哈希图中,但是我认为使用数组更适合您的水平。
一旦设置了Student类,就可以创建一个Student数组(称之为“教室”或类似的东西)。 此教室阵列的最大大小为200或最大学生人数。 每当为新学生添加分数时,都应在教室阵列中添加相应的Student对象,并记下他们的学生ID。 添加的第一个学生的学生ID为1,第二个学生的学生ID为2,依此类推。 这样做是为了您可以轻松为现有学生添加更多分数。 您必须以不同的方式分析用户输入以解决此更改。
用户输入的学生数据现在可以采用以下形式:
[studentName]:[score1,score2,...]
[studentID]:[score1,score2,...]
例:
(第一次输入学生数据)
Bob Jones: e100 e95 e87 q10 q10 q8 h10 h10 h10
(用户按ENTER)
>鲍勃·琼斯(Bob Jones)具有StudentID 1.输入更多学生数据或“ END”。
Joe Smith: q10 q10 h7 h10 h9 h10 e80
然后,如果您想为已有的学生添加更多分数,则可以使用他们的学生ID来引用它们,以便
1: e90 h7 q8 q9 h10
会将这些分数添加到学生ID为1的学生,即Bob Jones。 由于数组从0开始,因此每个学生的学生ID只会比数组中的索引多1(学生1的索引为0,学生2的索引为1,依此类推)。 另一种方法(更复杂,效率更低)是对照数组中的每个元素检查学生姓名,如果学生已经存在,则增加分数,否则,添加新的Student对象。
由于您无法更改数组的大小,因此如果您要求用户将分数实施为Student类的变量,那么当您询问用户每个学生的考试,测验和家庭作业的总数时,您可能会遇到问题。 您应该查找数组和arraylist之间的差异。 确保阻止用户添加比开始指定的分数更多的分数。
如果输入为
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
[上面的代码尚未经过测试]
(请参阅https://docs.oracle.com/javase/7/docs/api/java/lang/String.html )
通常,您的代码很难理解,我认为这个问题并不完整。
祝好运! 开始编程可能很困难,但很快就会令人惊奇。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.