首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从用户输入字符串向数组添加数据

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

Stack Overflow用户
提问于 2014-11-21 17:01:26
回答 2查看 1.9K关注 0票数 1

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

我打算用4个不同的数组来完成这个任务:一个是名字,一个是HW分数,一个是测验成绩,一个是考试成绩。

它是如何工作的每个学生,你输入的名字,后面的分数,前面的字母,每一个表明它是什么样的分数。示例:

代码语言:javascript
运行
复制
Bob Jones: e100 e95 e87 q10 q10 q8 h10 h10 h10
Joe Smith: q10 q10 h7 h10 h9 h10 e80

让程序将每个名称存储在数组中似乎很容易,但我很难理解如何让它拉出e100、e95等,并将它们放入测试数组中。到目前为止,我的代码显然不会这样做,而是设置为按照输入的顺序向每个数组添加一个整数:

代码语言:javascript
运行
复制
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:权重

这是用户在程序开始时输入“等级项目详细信息”的方式:

考试(编号、分数、重量):310060(用户按下“输入”)

小测验(编号、分数、重量):31020(用户按下输入)

作业(编号、分数、重量):31020(用户按下输入)

第一个数字是课程中的考试/测验/家庭作业的数量,第二个数字是每次考试/测验/家庭作业的最高分,第三个数字是期末考试/测验/家庭作业的重量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 19:46:49

如果输入是

代码语言:javascript
运行
复制
Bob Jones: e100 e95 e87 q10 q10 q8 h10 h10 h10

你用以下方法恢复它:

代码语言:javascript
运行
复制
names[i] = s.next();
examScores[e] = s.nextInt(); 
quizScores[q] = s.nextInt();
homeworkScores[h] = s.nextInt();

这是行不通的..。分数不是示例中的整数(它们是字符串),您必须解析该字符串并将其拆分:

代码语言:javascript
运行
复制
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)

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

  • 尝试使用方法并注释关键行。
  • 用一个常量表示200 (我想这是学生的数量)
  • 创建对象(学生,得分,.)
  • 使用java对象(HashMaps,List,.)
  • 使用开关/用例代替if(输入== 1)

祝好运!开始编程可能很困难,但很快就会很棒。

票数 0
EN

Stack Overflow用户

发布于 2014-11-21 20:43:21

您可以尝试将用户输入存储为字符串,然后使用split(),但我认为使用StringTokenizer解析学生姓名和分数会更好:https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html

一旦你把学生的名字和分数分开,你就可以检查每个分数的第一个字符;如果这个字符是"e",把数字部分添加到考试数组中;如果是"q",添加到测验数组中;"h“进入家庭作业数组。

一些一般性建议:

我建议您允许程序继续逐行输入学生数据,直到用户输入"END“或其他关键字为止。

根据你设置数组的方式,无法判断哪个学生得到了什么分数。您将需要能够这样做的其他部分的程序。我建议创建一个以每个学生为对象的学生类,并将分数记录为int数组。

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

一旦设置了“学生”类,就可以创建一个“学生数组”(称为“教室”或类似的内容)。这个教室阵列将有一个最大的大小为200或任何最大的学生人数是。每当您为新学生添加分数时,您应该在教室数组中添加相应的“学生对象”,并记下他们的学生ID。第一个学生的ID为1,第二个学生的ID为2,依此类推。这样你就可以轻松地为现有的学生添加更多的分数。您必须以不同的方式解析用户输入以解决此更改。

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

  • studentName: score1,score2,.
  • studentID: score1,score2,.

示例:

(第一次输入学生资料)

代码语言:javascript
运行
复制
Bob Jones: e100 e95 e87 q10 q10 q8 h10 h10 h10

(用户按回车)

鲍勃琼斯有StudentID 1,输入更多的学生数据或“结束”。

代码语言:javascript
运行
复制
Joe Smith: q10 q10 h7 h10 h9 h10 e80

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

代码语言:javascript
运行
复制
1: e90 h7 q8 q9 h10

将这些分数添加到studentID 1的学生中,即Bob。因为数组从0开始,每个学生的学生ID只会比数组中的索引多1(学生1在索引0,学生2在索引1,等等)。另一种(更复杂和效率较低)方法是根据数组中的每个元素检查学生姓名,如果学生已经存在,则添加更多的分数,如果不存在,则添加一个新的student对象。

由于不能更改数组的大小,所以当您向用户询问每个学生的考试、测验和家庭作业的总数时,可能会遇到问题,假设您将分数作为学生类的变量来实现。您应该查找数组和数组列表之间的差异。确保阻止用户添加比开始时指定的分数更多的分数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27066541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档