2015-03-26 3 views
0

Я использую следующий код в C и C++ для цикла до пользователя подает правильное значение до программы выходит из него:Есть ли эквивалент while (scanf() == 1) в java?

while((scanf("%d",&num)==1)//same way in for loop 
{ 
    //some code 
} 

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

+1

Как вы планируете читать данные ?. Вы посмотрели методы в этом классе? – TheLostMind

+1

Посмотрите на класс «Сканер»: https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html –

+0

@ArnaudDenoyelle: да, я прекратил читать, когда делаю, когда я пришел к решению, которое мне нужно. Спасибо – Dhananjay

ответ

1

Использование:

Scanner sc = new Scanner(System.in); // OR replace System.in with file to read 
while(sc.hasNext()){ 
    //code here 
    int x = sc.nextInt(); 
    //... 
} 

Существуют различные варианты hasNext() для конкретных ожидаемых типов ввода: hasNextFloat(), hasNextInt() .. То же самое касается next() метода, так что вы можете найти nextInt(), nextFloat() или даже nextLine()

Вы можете перейти на страницу Java doc для получения дополнительной информации.

+0

Спасибо. Множество высказываний по сравнению с c и C++ за одно дело, но эй, кто спрашивает. – Dhananjay

0

Как указано в комментариях, вы можете использовать класс Scanner. Обратите внимание, что вам нужно прочитать буфер в nextLine(), если он не является int.

public static void main(String[] args) { 
    try (Scanner in = new Scanner(System.in)) { 
     System.out.println("Enter an int: "); 
     while (!in.hasNextInt()) { 
      System.out.println("That's not an int! try again..."); 
      in.nextLine(); 
     } 
     int myInt = in.nextInt(); 
     System.out.println("You entered "+myInt); 
    } 
} 
+0

Вы забыли упомянуть класс java.util.Scanner, но я думаю, что все в порядке. Я не могу кормить ложкой. Но используется метод try(), приведенный выше пример отлично работает – Dhananjay

+0

'try (...) {...}' (называемый [try with resource] (https://docs.oracle.com/javase/ tutorial/essential/exceptions/tryResourceClose.html)) просто для автоматического 'close()' 'Scanner', когда вы закончите с ним. Это хорошая практика для закрытия любого ресурса, такого как файлы, подключения и т. Д. Вы также можете сделать это явно в своем коде и управлять различными исключениями. –

+0

Так вот почему я продолжаю получать предупреждения об утечках памяти? Я использую @SuppressWarnings («resource»), чтобы закрыть это в main. – Dhananjay