2013-09-13 4 views
0

Я писал приложение Java, которое принимает 6 значений (2 в первом разделе, 3 во втором, 1 в последнем). Затем он выдает среднее значение первого набора данных, затем второе, а затем общее среднее значение.Ошибка усреднения Java

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) 
+0

Тот же код работает для меня ... – gparyani

+3

'double t1 = scan.nextInt()' ??? не должно быть int? – Farlan

+2

уверены, что вы даете достоверные данные сканера? – chancea

ответ

1

Я думаю, что я столкнулся с подобной проблемой, не так давно. Вам необходимо будет подтвердить свой ввод, прежде чем хранить его. Для этого важно визуализировать сканер с «трубой» со строкой, проходящей через вход в трубу (пользовательский ввод) и различными возможными значениями (просто текстовая строка, int, двойная, двоичная или другие форматы) «выходит» из другого конца трубы (что ваш код считывает сканер в вашем коде)

Вот список валидаций, что кажется, что вы хотите реализовать:.

  • - это длина следующего значения, превышающего 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) 

Помните, что в этом примере, если вы вводите [любое количество мусора, не текст номер] + пробел + целое число, оно будет прокручиваться через все вещи и найти целое число.

Смежные вопросы