读取java中的名称和等级值

读取java中的名称和等级值,java,java.util.scanner,delimiter,Java,Java.util.scanner,Delimiter,我目前正在尝试为家庭作业程序编写一个程序,该程序将读取表单中的值 John Q.Woodcuter | 75 | 82 | 2 | 0 | 15 | 57 | 55 | 56 | 10 | 25 | 48其中第一个值是学生姓名,其他值在整个学期都有不同的分数。分数的顺序很重要,因为职位决定了他们的分数。例如,第一个是他们的考试,第二个是他们的期中考试。我在阅读有用的数据时遇到了困难,所以任何帮助都会很好。这是我的 import java.util.Scanner; import java.lan

我目前正在尝试为家庭作业程序编写一个程序,该程序将读取表单中的值

John Q.Woodcuter | 75 | 82 | 2 | 0 | 15 | 57 | 55 | 56 | 10 | 25 | 48其中第一个值是学生姓名,其他值在整个学期都有不同的分数。分数的顺序很重要,因为职位决定了他们的分数。例如,第一个是他们的考试,第二个是他们的期中考试。我在阅读有用的数据时遇到了困难,所以任何帮助都会很好。这是我的

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, letGr;
      Scanner scanner = new Scanner(System.in);
      System.out.println("Please input grades");
      scanner.useDelimiter("|");
      name = scanner.next();
      ex = scanner.nextFloat();
      mid = scanner.nextFloat();
      bonus = scanner.nextFloat();
      cheat = scanner.nextFloat();
      a1 = scanner.nextFloat();
      a2 = scanner.nextFloat();
      a3 = scanner.nextFloat();
      a4 = scanner.nextFloat();
      a5 = scanner.nextFloat();
      a6 = scanner.nextFloat();
      a7 = scanner.nextFloat();
代码的其余部分只是一系列执行实际坡度计算的if语句。另外,如果我想让程序从命令行接受带有测试用例的文本文件,并一直运行到文件结束,那么最好的方法是什么,因为我实际上没有用程序打开文件


谢谢你的帮助

嗨,你可以这样试试

public static void main(String[] args) throws Exception {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String str ;
        while ((str = reader.readLine())!=null) {

            Scanner scanner = new Scanner(str);

            float ex, mid, bonus, cheat, a1, a2, a3, a4, a5, a6, a7, grade,A; 
            float Jb=0;
            String name, letGr;
            System.out.println("Please input grades");
            scanner.useDelimiter("|");
            name = scanner.next();
            ex = scanner.nextFloat();
            mid = scanner.nextFloat();
            bonus = scanner.nextFloat();
            cheat = scanner.nextFloat();
            a1 = scanner.nextFloat();
            a2 = scanner.nextFloat();
            a3 = scanner.nextFloat();
            a4 = scanner.nextFloat();
            a5 = scanner.nextFloat();
            a6 = scanner.nextFloat();
            a7 = scanner.nextFloat();
        }
    }

只是一个建议,但您可以使用扫描仪只读取每一行,然后将该行除以|,这样您就可以在每一行上有任意数量的分数:

Scanner scanner = new Scanner(System.in);
System.out.println("Please input grades");

String line = scanner.nextLine();

while ( line.length() > 0 ) // quit when user enters no data
{
  String[] data = line.split("|"); // store the data in an array
  name = data[0];
  // use a for-loop to iterate from index 1 to data.length to see all the grades
  ...
  line = scanner.nextLine();
}
如果希望扫描仪在EOF前读取:

Scanner scanner = new Scanner(new File("/path/to/file.txt"));
while ( scanner.hasNextLine() )
{
  String line = scanner.nextLine()
  ... // parsing code in here
}

谢谢,我没想过那样做!如果我想使用数组中的值来计算分数,我会做类似于'ex=Float.parseFloatdata[1];'或者是否有更好的方法将数组元素转换为浮点数指定要在赋值中使用的浮点数。我相信还有其他方法,但这可能是最简单的,也是我会做的。谢谢你的帮助!当我用colin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11运行程序进行测试时,我会遇到各种运行时错误,它们都是针对输入字符串c的,这是否意味着它甚至在读取完名称之前就出现了故障?我对所有的问题感到抱歉,我只是在与java进行斗争,这是本课程中唯一的java作业,其余的都在CI中,我需要更多的细节。你的意思是只输入c,就会出现一系列运行时错误?