如何通过“”分隔字符串并将其存储到2个不同的数组中?

时间:2019-11-12 12:49:50

标签: java arrays string

我正在尝试解决竞争性编程实践问题。我只是一个初学者,所以请多多包涵。

这是问题

您学校的历史老师需要使用他设计的真/假测验等级的帮助 计分技术。每个正确答案可获得2分,每个错误答案可获得1分 扣除点,没有答案为零。 您的任务是帮助老师自动完成此任务。 输入项 文件中的第一项包含以下形式的测试答案: TFFTFTFTFFFTTTTFTFTF

下一行是测试案例的数量,即参加测试的学生人数。 文件中的所有其他条目都是学生ID,后跟一个空白,然后是学生的 回应。例如,条目:

S2013-1-1003 TFTFTFTT TFTFTFFTTFT

表示学生ID为S2013-1-1003,问题1的答案为True,则 问题2的答案为False,依此类推。这名学生没有回答问题9。 这个例子有20个问题。 输出量 输出应该是学生的ID,然后是答案,然后是测试成绩, 其次是考试成绩。假设以下等级量表:90%-100%,A; 80%-89.99%,B; 70%-79.99%,C; 60%-69.99%,D;和0%-59.99%F。

样本输入

TTTTTFFFFF

3

S2013-1-2345 TTTTTFFFFF

S2013-1-1266 TFTFTFTFTF

S2012-2-0006 T T TF F F

样本输出

S2013-1-2345 TTTTTFFFFF 20 A

S2013-1-1266 TFTFTFTFTF 8 F

S2012-2-0006 T T TF F F 12 D

* /

我的代码:

public class Score {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);

        //input answer to the test
        String correctAnswer = sc.nextLine(); 

        //input number of test cases
        int numberOfStudents = sc.nextInt();

        String studentID[] = new String[numberOfStudents];
        String studentAnswer[] = new String[numberOfStudents];
        int studentScore[] = new int[numberOfStudents];
        char studentGrade[] = new char[numberOfStudents];
        //ask user to input data
        for(int i = 0; i < numberOfStudents; i++) {
            System.out.println("Enter student details");
            studentID[i] = sc.nextLine();
            studentAnswer[i] = sc.nextLine();
        }//end of first for loop


        //checks whether the student has the correct score
        for(int y = 0; y < correctAnswer.length(); y++) {
            if(studentAnswer[y].charAt(y) == correctAnswer.charAt(y)) {
                studentScore[y]++;
            }//end of if
        }//end of for

        for(int y = 0; y < numberOfStudents; y ++) {
            double percentage = (studentScore[y] / correctAnswer.length()) * 100 ;

            //check the letter grade of the student
            if(percentage >= 90) {
                studentGrade[y] = 'A';
            }//end of first if
            else if(percentage >= 80 && percentage <= 89) {
                studentGrade[y] = 'B';
            }//end first else if
            else if(percentage >= 70 && percentage <= 79) {
                studentGrade[y] = 'C';
            }//end of second else if
            else if(percentage >= 60 && percentage <= 69) {
                studentGrade[y] = 'D';
            }//end of third else if
            else {
                studentGrade[y] = 'F';
            }//end of last else
        }//end of for
        //close the scanner to avoid any memory leaks

        //display the score
        for(int i = 0; i < numberOfStudents; i++) {
            System.out.printf("%d\t%d\t%d\t%d", studentID[i], studentAnswer[i], studentScore[i], studentGrade[i]);
        }//end of first for

    }//end of main
}//end of class

程序会编译,但是一旦我输入测试数据,我都会从编译器收到outofBounders错误。然后我意识到我在这段代码中犯了一个错误

            System.out.println("Enter student details");
            studentID[i] = sc.nextLine();
            studentAnswer[i] = sc.nextLine();
        }//end of first for loop

如果StudentID和studentAnswer是整数,那么我可以使用空格将它们分开,然后在一行中输入数据。但是我忘记了当我使用空格作为分隔符时,它不会被分隔,因为空格仍被视为字符串。我的主要问题是如何要求用户在由字符串分隔的一行中输入学生ID和答案,以便可以将其存储到学生ID数组和studentAnswer数组等数组中。

2 个答案:

答案 0 :(得分:0)

用于显示分数的格式说明符是错误的!您可以如下进行更改:

//显示分数

for(int i = 0; i < numberOfStudents; i++) {

System.out.printf("%s\t%s\t%d\t%s", studentID[i], studentAnswer[i], studentScore[i], studentGrade[i])

 }//end of first for

答案 1 :(得分:0)

您正在使用sc.nextLine()进行输入。 nextLine()的作用是,它从输入缓冲区读取所有字符,直到找到 \ n newline 个字符。

因此,您可以要求用户以这种方式进行输入: 学生ID \ n studentAnswer

另一种修改输入数组的方法如下:

for(int i = 0; i < numberOfStudents; i++) {
    System.out.println("Enter student details");
    String line = sc.nextLine();
    char[] chars = line.toCharArray();
    String fs = "";
    String sc = "";
    boolean flag = false;
    for(int j=0;j<chars.length;j++){
        if(chars[j]==' ') {
            flag = true;
            continue;
        }
        if(flag ==false) fs += chars[j];
        else sc += chars[j];
    }

    studentID[i] = fs;
    studentAnswer[i] = sc;
}