2013-12-22 6 views
0

Я очень новичок в java, и я пытаюсь сделать базовый калькулятор. В этом есть еще один вопрос, но я изменил то, что исправил его для него, но он все еще не работает. Вот мой код:Java простой калькулятор Ошибка

import java.util.Scanner; 

class HelloWorld{ 

    public static void main(String args[]) 

     int num1; 
     int num2; 
     String op; 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter your first number"); 

     num1 = input.nextInt(); 

     System.out.println("Enter your second number"); 
     num2 = input.nextInt(); 

     System.out.println("Enter the operation"); 
     op = input.nextLine(); 

     if (op.equals("*")){ 
      System.out.println("The answer is: " + (num2 * num1)); 
     } 

     if (op.equals("/")){ 
      System.out.println("The answer is: " + (num2/num1)); 
     } 

     if (op.equals("+")){ 
      System.out.println("The answer is: " + (num2 + num1)); 
     } 

     if (op.equals("-")){ 
      System.out.println("The answer is: " + (num2 - num1)); 
     } 
    } 
    } 

Ошибка говорит:

Enter your first number 
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 HelloWorld.main(HelloWorld.java:12) 

Я не могу найти, что не так (у меня есть свое что-то простое, что я пропустил)

+0

Зачем вам нужен второй 'Scanner'? Какая строка '12'? –

+2

Эта ошибка для метода 'main()' приложения HelloWorld. –

+0

Я не думаю, что знаю. Я избавился от него, но это дает мне ту же ошибку. – minipanda1

ответ

2

Что вы входя?

Enter your first number 
10 
Enter your second number 
20 
Enter the operation 
* 
The answer is: 200 
+0

Я не позволяю мне ничего вводить. Это дает ошибку сразу. – minipanda1

+0

@ user3126413 Как вы его вызываете? –

+0

Что вы подразумеваете под этим? – minipanda1

0

Единственное, что я вижу неправильно это public **satic** void main(String args[]) Другие, чем это делает то, что он должен ...

+0

Хорошо, да, это я набрал его (случайно удалил его после того, как он выполнил код) – minipanda1

+0

OP говорит, что они получают по крайней мере первую строку для печати на консоли. Если эта проблема 'satic' /' static' была проблемой, программа даже не компилировалась. –

0

Всякий раз, когда вы читаете любой маркер из сканера. У вас есть возможность проверить, действительно ли он существует с помощью методов hasNext(). Таким образом, вы можете сделать

Для проверки Интс:

if(input.hasNextInt()) 
input.nextInt() 

Для проверки линий:

if(input.hasNextLine()) 
input.nextLine() 

Это позволит избавиться от обновления на NoSuchElementException

:

System.out.println("Enter the operation"); 
op = input.next(); //changing it to next() fixed it 

Выход

run: 
    Enter your first number 
    2 
    Enter your second number 
    3 
    Enter the operation 
    * 
    The answer is: 6 
    BUILD SUCCESSFUL (total time: 6 seconds) 
+0

Не в этом случае. В потоке Ststem.in' всегда есть 'next'. –

+0

Вы имеете в виду System.in? Не могли бы вы немного объяснить? – Keerthivasan

+0

'hasNext()' всегда будет возвращать 'true' при чтении из' System.in', так как не существует конца файла для ввода с клавиатуры. Очевидно, что это тоже не относится к 'hasNextInt()' или любому другому типу-специфическому методу. –

1

Я не уверен, что ваша программа будет даже скомпилировать так, как вы есть, но вот одна проблема:

Вы не открыли свой метод main с открыть фигурные скобки.

Изменить это:

public static void main(String args[]) 

к этому:

public static void main(String args[]) { 

Когда я тестировал свой код, он прекращается после Enter the operation. Однако, когда я изменил эту строку:

op = input.nextLine(); 

к этому:

op = input.next(); 

Он работал отлично.

Вот пример консольного ввода/вывода:

Enter your first number 
10 
Enter your second number 
20 
Enter the operation 
* 
The answer is: 200 
Смежные вопросы