java - 从数组打印的 For 循环

标签 java arrays string sorting substring

我正在尝试使用文本文件为学生打印两个单独的考试分数。 以下是文本文件的屏幕截图:

第一列是学号,后面两列都是考试成绩

下面是我执行计算和打印的代码:

       //for loop that does calculations and prints
    for(int i = 0; i < arraySize;i++){
        String markOneFull = studentExamOneArray[i];
        String markOneString = markOneFull.substring(5,7);
        double markOne = Double.parseDouble(markOneString);
        examOneNoID[i]= markOne;

        String markTwoFull = studentExamTwoArray[i];
        String markTwoString = markTwoFull.substring(8,10);
        double markTwo = Double.parseDouble(markTwoString);
        examTwoNoID[i] = markTwo;

  /*      String markThreeFull = studentExamThreeArray[i];
        String markThreeString = markThreeFull.substring(5,10);
        double markThree = Double.parseDouble(markThreeString);
        examThreeNoID[i] = markThree;

        String markFourFull = studentExamFourArray[i];
        String markFourString = markFourFull.substring(5,10);
        double markFour = Double.parseDouble(markFourString);
        examFourNoID[i] = markFour;
   */     

        // Aggregate Mark

        double aggregate = (examOneNoID[i] + examTwoNoID[i])/2;
        DecimalFormat oneDigit = new DecimalFormat("#,##0.0");


        //time to write
        write.println(studentArray[i] + "\nAB101: " + examOneNoID[i] + " " + " AB102: " + examTwoNoID[i] + " Overall Mark: " + oneDigit.format(aggregate));
        write.println("----------------------------------------");
    }
    write.close();


}

当我运行该程序时,我收到一条错误消息:

 Exception in thread "main" java.lang.NumberFormatException: empty String
  at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
  at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
  at java.lang.Double.parseDouble(Double.java:538)
  at MarksProcessing.main(MarksProcessing.java:42)

最佳答案

尝试这样的事情:

    Scanner sc = new Scanner(new File(fileName));

    int i = 0;
    while (sc.hasNext())
    {
        students[i] = sc.nextInt();
        studentExamOneArray[i] = sc.nextDouble();
        studentExamTwoArray[i] = sc.nextDouble();


        double aggregate = (studentExamOneArray[i] + studentExamTwoArray[i])/2;
        DecimalFormat oneDigit = new DecimalFormat("#,##0.0");
        System.out.println("Student: " + students[i] + " FirstGrade: " + studentExamOneArray[i] + " SecondGrade: " + studentExamTwoArray[i] + " Overal: " + oneDigit.format(aggregate));
        i++;
    }

现在,您不需要子字符串等。您知道带有成绩的文件的结构或该文件的任何内容。而且您不需要额外的数组(您可以使用一个数组来表示字符串,然后使用一个数组来表示 double ,依此类推)。只需将数字读入数组,然后进行数学计算并打印即可。

关于java - 从数组打印的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31905481/

相关文章:

java - 如何将速度上下文变量用作局部变量

arrays - 旋转阵列中的最长子阵列

Python str() 双引号字符串

c++ - 以我的方式向后写一个字符串,有时会导致额外的输出,与字符 ' w ' 相关

java - 在 Spring [Boot] 中手动解决依赖关系

java - 添加条件以接受 HashMap 中的特定条目

java - 同步和静态同步有什么区别?

c - 如何增加数组的限制?

arrays - 如何在powershell中将string.format与字符串数组一起使用

Java - 想要将整数值类型转换为字节,这样我就可以以二进制格式写入文件