2015-07-10 5 views
1

Я ОЧЕНЬ новичок в Java, я пытаюсь сделать программу преобразования единиц с Фаренгейта до Цельсия, и я оглушаю цикл проверки. Это то, что я получил.Как исправить эту проверку цикла?

// Validation 
    do { 
     isNumber = true; 

     System.out.print("What is the temperature in Fahrenheit?: "); 

     // If alphabetical characters are entered 
     while (!input.hasNextDouble()) { 
      System.out.println("Oops! Try entering only numerical characters."); 
      System.out.println(); 

      isNumber = false; 
      input.next(); 
     } 
     fahrenheit = input.nextDouble(); 

    } while (!isNumber); 

как вы можете видеть, что я пытаюсь проверить, так это то, что пользователь не вводит строку. но когда я запускаю программу, она застревает на каком-то цикле и говорит

What is the temperature in Fahrenheit?: something <-- what I input 
    Oops! Try entering only numerical characters. 

и это все. она не возвращается к входу или что-либо, он просто остается там, пока я не ввести номер, а затем он возвращается к

What is the temperature in Fahrenheit?: 

Чтобы уточнить, моя проблема только с контуром проверки, потому что, когда я введите номер, который он работает очень хорошо. Проблема появляется ТОЛЬКО при вводе строки.

+0

'input.nextLineDouble();'? Это не работает для меня. – lokilindo

ответ

0

Пример кода:

import java.util.Scanner; 

public class QuickTester { 

    public static void main(String[] args) { 

     double fahrenheit; 
     Scanner input = new Scanner(System.in); 

     // Validation 
     while(true) { 

      System.out.print("What is the temperature in Fahrenheit?: "); 

      // If alphabetical characters are entered 
      if (!input.hasNextDouble()) { 
       System.out.println("Oops! " + 
         "Try entering only numerical characters.\n"); 

       // Clear away erroneous input 
       input.nextLine(); 
      } 
      else { 

       fahrenheit = input.nextDouble(); 
       break; // Get out of while loop 
      } 
     } 

     input.close(); 
     System.out.println("Temperature in Fahrenheit: " + fahrenheit); 
    } 
} 

ввода/вывода:

What is the temperature in Fahrenheit?: abc 
Oops! Try entering only numerical characters. 

What is the temperature in Fahrenheit?: banana 
Oops! Try entering only numerical characters. 

What is the temperature in Fahrenheit?: 36.5 
Temperature in Fahrenheit: 36.5 

Примечание:

  • После доработки кода. Вам не нужен цикл while в цикле do-while.
  • Проверьте, является ли вход двойным, вырваться из цикла while, если это действительно двойное значение.
+0

Gosu, у меня все еще такая же проблема. – lokilindo

+0

если я делаю 'fahrenheit = input.nextDouble(); isNumber = true; // Устанавливаем это в true !! '' isNumber' никогда не будет 'false' и' while (! IsNumber); 'становится устаревшим – lokilindo

+0

I allready сделал' isNumber = true; 'в начале' do {' loop – lokilindo

0

Что-то, как это будет делать

Scanner input = new Scanner(System.in); 
    double fahrenheit; 

    do { 
     System.out.print("What is the temperature in Fahrenheit?: "); 
     try { 
      fahrenheit = input.nextDouble(); 
      //Do your work 
      break; 
     } catch (InputMismatchException ex) { 
      input.nextLine(); 
      System.out.println("Oops! Try entering only numerical characters."); 
      System.out.println(); 
     } 
    } while (true); 
0

это будет делать трюк.

public class Main 
{ 

    public static void main(String[] args) 
    { 

     Scanner input = new Scanner(System.in); 

     System.out.print("What is the temperature in Fahrenheit?: "); 

     // If alphabetical characters are entered 
     while (!input.hasNextDouble()) 
     { 
      System.out.println("Oops! Try entering only numerical characters."); 
      System.out.println(); 

      input.next(); 
     } 
     //Do Fahrenheit to Celsius calculation 

    } 

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