Java平均错误

时间:2013-09-13 15:51:41

标签: java average

我一直在编写一个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)

1 个答案:

答案 0 :(得分:1)

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

以下是您希望实施的验证列表:

  • 是下一个值大于0的长度? (这与在按Enter键之前询问用户是否实际输入了某些内容或同时没有任何内容相同。它通常由scanner .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)

请记住,在这个例子中,如果你输入[任意数量的垃圾非数字文本] +空格+一个整数,它将滚动整个事物并找到整数。