0

我一直在编写一个 Java 应用程序,它接受 6 个值(第一部分为 2,第二部分为 3,最后部分为 1)。然后它输出第一个数据集的平均值,然后是第二个,然后是总平均值。

import java.io.*;
import static java.lang.System.*;

import java.util.Scanner;

class Main{
    public static void main (String str[]) throws IOException {

        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter your test grades.");
        double t1 = scan.nextInt();
        double t2 = scan.nextInt();
        System.out.println("Please enter your quiz grades.");
        double q1 = scan.nextInt();
        double q2 = scan.nextInt();
        double q3 = scan.nextInt();
        System.out.println("Please enter your homework average.");
        double hmw = scan.nextInt();
        double arc1 = ((t1 + t2) / 2);
        System.out.println("Test Average:" + arc1);
        double arc2 = ((q1 + q2 + q3) / 3);
        System.out.println("Quiz Average:" + arc2);
        double arcfinal = ((arc1 * 0.5) + (arc2 * 0.3) + (hmw * 0.2));
        System.out.println("Final Grade:" + arcfinal);
    }

}

我无法弄清楚我的编码有什么问题。这是我的错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at average.main(Main.java:13)
4

1 回答 1

1

我想我不久前遇到了类似的问题。您需要在存储之前验证您的输入。为此,重要的是可视化扫描仪有一个“管道”,其中一个字符串穿过管道的入口(用户输入)和不同的可能值(只是一个文本字符串、一个 int、一个双精度值、一个二进制文件或其他格式)从管道的另一端“出来”(这是您的代码读取代码中的扫描仪。)

以下是您似乎想要实现的验证列表:

  • 下一个值的长度是否大于 0?(这与在按 Enter 之前询问用户是否实际输入了某个内容或什么都没有一样。它通常由扫描仪自动完成。Next() 函数。)
  • 下一个值是数字吗?
  • 如果下一个值不是数字,管道下方是否有数字?(这与检查用户是否错误地在数字前插入了一个空格相同。)

我在下面写了一个例子,说明每次你在寻找一个成绩时应该发生什么:

import java.io.*;
import static java.lang.System.*;
import java.util.Scanner;

class Main{

         static double t1, t2, q1, q2, q3, hmw;
         public static void main (String str[]) throws IOException 
         {
                Scanner scan = new Scanner(System.in);
                System.out.println("Please enter your test grades.");

                System.out.println("Enter grade one: ");
                // While there is something in the pipe
                while(scan.hasNext()!=false)
                {
                    // Check if this value is an integer
                    if(scan.hasNextInt())
                    {
                        t1 = scan.nextInt();
                        System.out.println("Successful input. Grade entered: "+t1);
                        break;
                    }
                    // it is not an integer, display a message saying it is an invalid input
                    else
                    {
                        // Flush the invalid input
                        scan.next();
                        System.out.println("Invalid input detected.");
                    }
                }               
//... (rest of the code)

请记住,在此示例中,如果您输入 [任意数量的垃圾非数字文本] + 空格 + 一个整数,它将滚动整个内容并找到整数。

于 2013-09-13T19:31:38.350 回答