java - 使用字符串值作为计算java的 float

标签 java arrays

<分区>

我正在编写一个家庭作业程序,所有内容最终都已编译,但是我遇到了一些我不确定如何解释的运行时错误。

import java.util.Scanner;
import java.lang.Math;

public class A1
{
   public static void main(String [] args)
   {
      float ex, mid, bonus, cheat, a1, a2, a3, a4, a5, a6, a7, grade,A; 
      float Jb=0;
      String name; 
      String letGr="NA";
      Scanner scanner = new Scanner(System.in);
      System.out.println("Please input grades");
      String line = scanner.nextLine();
      String data[] = line.split("|");
      name = data[0];
      ex = Float.parseFloat(data[1]);
      mid = Float.parseFloat(data[2]);
      bonus = Float.parseFloat(data[3]);
      cheat = Float.parseFloat(data[4]);
      a1 = Float.parseFloat(data[5]);
      a2 = Float.parseFloat(data[6]);
      a3 = Float.parseFloat(data[7]);
      a4 = Float.parseFloat(data[8]);
      a5 = Float.parseFloat(data[9]);
      a6 = Float.parseFloat(data[10]);
      a7 = Float.parseFloat(data[11]);
      A = (a1+a2+a3+a4+a5+a6+a7)/320;

      grade = 0.5f * ex + 0.1f *mid + 0.1f * A + bonus + Jb;
      if (ex < 40) 
         grade += 0.3 * ex; 
      else
         if (ex > 50)
            grade += 0.2 * Math.max(ex, mid) + 0.1 * Math.max(ex, A);
      else
         grade += 0.02 * ((ex - 40) * Math.max(ex, mid) + (50 - ex) * ex)
         + 0.01 * ((ex - 40) * Math.max(ex, A) + (50 - ex) * ex);
      if (mid < 40)
         grade = Math.min(grade, mid);
      if (A < 50)
         grade = Math.min(grade, A);

      if (cheat >= 1)
         grade = 0;

      if (grade >= 94)
         letGr = ("A+");
      if (grade >= 87 && grade < 94)
         letGr = ("A");
      if (grade >= 80 && grade < 87)
         letGr = ("A-");
      if (grade >= 77 && grade < 80)
         letGr = ("B+");
      if (grade >= 73 && grade < 77)
         letGr = ("B");
      if (grade >= 70 && grade < 73)
         letGr = ("B-");
      if (grade >= 67 && grade < 70)
         letGr = ("C+");
      if (grade >= 63 && grade < 67)
         letGr = ("C");
      if (grade >= 60 && grade < 63)
         letGr = ("C-");
      if (grade >= 57 && grade < 60)
         letGr = ("D+");
      if (grade >= 53 && grade < 57)
         letGr = ("D");
      if (grade >= 50 && grade < 53)
         letGr = ("D-");
      if (grade < 50)
         letGr = ("F");



      System.out.println(line);




   }
}

当数据以形式输入程序时
John Q. Woodcutter|75|82|2|0|15|57|55|56|10|25|48 我得到了错误

java.lang.NumberFormatException: For input string: "J"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
    at java.lang.Float.parseFloat(Float.java:422)
    at A1.main(A1.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

我不确定该怎么做,正如您所看到的,我需要读入的值才能进行以后的成绩计算,但在去哪里方面遇到了障碍。我也尝试过使用定界符在读入字符串时将其分解,但无法使该方法起作用。我意识到这是很多代码,我不希望任何人做我的功课,我只是在寻找一些关于从这里去哪里以及我是否正确使用 Float.parseFloat 方法的提示。

感谢所有的帮助

最佳答案

String data[] = line.split("|");

split() 采用正则表达式,| 是正则表达式中的特殊字符。要在文字管道上拆分,请对管道进行转义。

String data[] = line.split("\\|");

使用 "|" 会导致每个字符被拆分,这就是为什么 parseFloat 提示您向它传递了字符串 "J" . split("|") 等同于 split(""),它在每次“发现”空字符串时拆分字符串。仔细想想,每个字符之间都有一个空字符串。

关于java - 使用字符串值作为计算java的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32463835/

相关文章:

php - 将包含多个用户 ID 的数组与用户表连接起来并创建新数组

java - 如何在REST应用程序中获取 "X-Forwarded-Proto" header ?

java - 如何正确返回方法的 Optional<>?

c - 1 和 0 存在于空 int 数组中

php - mySQL显示为数组

java - 在二维数组中查找邻居(不包括对角线)

javascript - 如何在 JavaScript 中从数组中获取不重复的随机数?

java - 如何监听 fragment 上 Activity 中按钮的点击操作?

java - 当我尝试启动模拟器时出现此错误意味着什么?

java - 获取数组/数据快照中唯一子项的数量?