2015-06-25 3 views
0
public class Main{ 
    public static void main(String args[]){ 
    int i = nextInt(); 
} 
public int nextInt(){ 
    int i=0; 
    boolean done=false; 
    Scanner scanner = new Scanner(System.in); 
    while (!scanner.hasNextInt()){ 
      scanner.nextLine(); 
     Printer.println(Printer.PLEASE_NUMBER); 
    } 
    i=scanner.nextInt(); 
    scanner.close(); 
    return i; 
} 
} 

Код выше, как я пытаюсь заставить пользователя ввести значение INT, но я получаю nosuchelement исключение, как scanner.nextLine() читает НОЛЬ. В C++ программное обеспечение ожидает ввода пользователем чего-либо. Есть ли что-нибудь, что я могу сделать, чтобы заставить программу остановиться, дождаться, когда пользователь что-нибудь введет, а затем сделать чек?Java сила Scanner пользователю ввести значение INT

EDIT: Так у меня возникли проблемы независимо, если я использую сканер вне главного класса, он дает эту ошибку ...

+0

Прошу полностью заполнить программу! – ganeshvjy

ответ

1

Если вы хотите, чтобы пользователь ввел и сканер, чтобы подобрать исключительно сканер целочисленного значения обеспечивает метод:

int i = scanner.nextInt(); 

Где i будет хранить следующее значение введенного в консоль. Он выдает исключение, если i не является целым числом.

Вот пример: Предположим, я хочу, чтобы пользователь вводил число, а затем я хочу вернуть его обратно пользователю. Вот бы мой основной метод:

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Please print your number: "); 
    int i = sc.nextInt(); 
    System.out.println("Your Number is: " + i); 
} 

Теперь, чтобы проверить i является ли целое число можно использовать, если заявление. Однако, если вы хотите, чтобы программа повторялась до тех пор, пока пользователь не вводит целое число, вы можете использовать цикл while или цикл while, где аргументы цикла будут проверять, является ли i целым числом.

Надеюсь, это то, что вы искали! Кстати, не назовите ваш метод nextInt(), поскольку у импорта java.util.Scanner; уже есть это имя метода. Не забывайте, что импортирует!

+0

GOtcha по имени метода. Как вы можете видеть, я уже использую цикл while, но я получаю нулевое чтение из scanner.nextLine() – Vale

+0

Я говорю, что вам не нужен ваш метод вместе. Вы можете просто поместить сканер в цикл while в основном сам по себе и соединить все вместе. – Colin

+0

Что произойдет, если пользователь вводит недопустимое целое число? (Вы получаете исключение. Как справиться с этим?) – DSlomer64

0

Вы можете сделать это:

public static void main(String[] args) { 
    System.out.println("" + nextInt()); 
} 

public static int nextInt(){ 
    int i=0; 
    boolean done=false; 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Please enter a number:"); 
    while (!scanner.hasNextInt()){ 
     System.out.println("Please enter a number:"); 
     scanner.nextLine(); 
    } 
    i = scanner.nextInt(); 
    scanner.close(); 
    return i; 
} 

Это заставит программу остановиться и ждать ввода каждый раз, когда цикл выполняется. Он будет продолжать цикл, пока не будет int в scanner.

+0

Исключение в теме "main" java.util.NoSuchElementException: Нет линии не найдено \t на java.util.Scanner.nextLine (Scanner.java:1585) \t в MAIN.Main.nextInt (Messenger.java:22) – Vale

+0

@Vale отлично работает для меня это означает, что у вас есть что-то еще Идет дальше ... что делает 'Printer.println'? Попробуйте скопировать и вставить именно то, что я использую 'System.out', и посмотреть, работает ли оно для вас ... – brso05

+0

@Vale, где вы запускаете' 'Eclipse'' Netbeans' Command Prompt'? – brso05

0

Это работает. Разумеется, это лучшее решение.

EDIT Как и ожидалось. Проверка this,

import java.util.Scanner; 

public class NewMain{ 
    static boolean badNumber; 
    public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    do{ 
     System.out.print("Please print your number: "); 
     try{ 
     int i = sc.nextInt(); 
     System.out.println("Your Number is: " + i); 
     badNumber = false; 
     } 
     catch(Exception e){ 
     System.out.println("Bad number"); 
     sc.next(); 
     badNumber = true; 
     } 
    }while(badNumber); 
    } 
} 
Смежные вопросы