2017-02-22 70 views
0

В Java, насколько возможно, я могу преобразовать числовой ввод сканера (например, 2 или 87) в целочисленную переменную? То, что я использую в настоящее время дает сообщение об ошибке:Как преобразовать вход сканера в целое число?

Exception in thread "main" java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.valueOf(Unknown Source) 
    at diDecryption.Didecryption.main(Didecryption.java:226) 

И это код, я использую, чтобы сделать это (кусочки, это часть более крупной программой):

System.out.println("Enter first number"); 
    Scanner sc=new Scanner(System.in); 
    String name=sc.next(); 
    int result = Integer.valueOf(name); 
    if (result/2 == 1){ 
    System.out.println("a"); 

Целью программы является декодирование зашифрованного сообщения. Ввод является числовым, и если я удалю строку в int-конвертер, деление не будет работать. Как это исправить?

+0

Ваш код отлично работает для меня, если я дам ему номер. Что именно вы предоставляете в качестве входа в систему? (Сообщение об ошибке, которое вы указали, указывает, что вы пытаетесь разобрать «null») – azurefrog

+0

Что вы вводите? Код выглядит хорошо для меня. http://ideone.com/omNdEF –

+2

Я сомневаюсь, что ваше сообщение об исключении соответствует вашему коду. Методы сканера не возвращают 'null'. Они выдадут исключение, если читать нечего. Пожалуйста, предоставьте [mcve]. – Tom

ответ

0
System.out.println("Enter first number"); 
Scanner sc=new Scanner(System.in); 
String name=sc.next(); 
int result = Integer.parseInt(name); 
if (result/2 == 1){ 
System.out.println("a"); 

ParseInt изменяет его примитивным ИНТ, а не объект Integer

+3

Это не будет иметь никакого значения, Java вполне счастлив удалить «Integer», возвращаемый 'valueOf()'. – azurefrog

+0

@azurefrog true, но их код, похоже, работает на меня –

0

Если вход числовая, то лучше использовать непосредственно метод

sc.nextInt(); 
+0

Это явно не конвертирует. Но я понимаю вашу идею –

0

В вашем StackTrace у вас есть null как параметр в Integer.valueOf(name). Кажется, ваша консоль создает некорректную входную последовательность. Попробуйте проверить его с sc.hasNext() условием:

System.out.println("Enter first number"); 
    Scanner sc = new Scanner(System.in); 
    if (sc.hasNext()) { 
     String name = sc.next(); 
     int result = Integer.parseInt(name); 
     if (result/2 == 1) { 
      System.out.println("a"); 
     } 
    } 
0

Попробуйте

System.out.println("Enter first number"); 
Scanner sc=new Scanner(System.in); 
int name=sc.nextInt(); 
if ((name/2) == 1) 
System.out.println("a"); 

RUN

run: 
Enter first number 
2 
a 
0

Попробуйте этот код

package exmaple; 

import java.util.Scanner; 

public class Parser { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 

     String name = in.next(); 

     try{ 
      int result = Integer.parseInt(name); 
      if(result/2 == 1) { 
       System.out.println("a"); 
      } 

     } catch(Exception exception) { 

     } 
     in.close(); 
    } 

}