2017-02-11 4 views
0

Мне нужно изменить мою программу, чтобы я мог запускать ее более одного раза, если это необходимо. Мне нужно выйти из программы, если пользователь вводит Q или q, и если что-либо, кроме запрошенной записи (или команды quit), будет задано, вопрос будет повторен. Вот код, который я до сих пор:Добавление циклов в существующую java-программу?

import java.util.Scanner; 

public class TemperatureLoop 
{ 

    private static Scanner keyboard = new Scanner(System.in); 

    public static void main(String[] args) 
    { 

     System.out.println("Enter a temperature in degrees (for example 32.6): "); 
     double temp; 
     temp = keyboard.nextDouble(); 
     System.out.println("Enter 'F' (or 'f') for Fahrenheit or 'C' (or 'c') for Celsius: "); 
     String letter = keyboard.next(); 
     double total = 0; 
     //if Farenheit then do this equation 
     if (letter.equals("F") || (letter.equals("f"))) 
     { 
      total = ((temp-32)*5)/9; //convert the entered temperature to Celsius 
      System.out.println(temp + " degrees F = " + total + " degrees Celsius"); 
     } 
     else //if Celsius then do this 
     if (letter.equals("C") || (letter.equals("c"))) 
     { 
      total = (((temp*9))/5)+32; //convert the entered temperature to Farenheit 
      System.out.println(temp + " degrees C = " + total + " degrees Fahrenheit"); 
     } 
    } 
} 

ответ

0

Вы должны использовать do-while цикл в этом случае

String letter = ""; 
do{ 
    System.out.println("Enter a temperature in degrees (for example 32.6): "); 
    double temp = 0; 
    while(true){ 
     if(keyboard.hasNextDouble()) 
     { 
      temp = keyboard.nextDouble(); 
      break; 
     } 
     else 
     { 
      System.out.println("Enter a valid double"); 
      sc.nextLine(); 
     } 
    } 
    System.out.println("Enter 'F' (or 'f') for Fahrenheit or 'C' (or 'c') for Celsius: "); 
    letter = keyboard.next(); 
    double total = 0; 
    //if Farenheit then do this equation 
    if (letter.equalsIgnoreCase("F")) 
    { 
     total = ((temp-32)*5)/9; //convert the entered temperature to Celsius 
     System.out.println(temp + " degrees F = " + total + " degrees Celsius"); 
    } 
    else if (letter.equalsIgnoreCase("C")) 
    { //if Celsius then do this 
     total = (((temp*9))/5)+32; //convert the entered temperature to Farenheit 
     System.out.println(temp + " degrees C = " + total + " degrees Fahrenheit"); 
    } 
}while(!letter.equalsIgnoreCase("Q")); 

Как работает цикл, все, что в do части всегда будет выполнять в наименее один раз. Затем он проверит условие while, чтобы определить, следует ли снова выполнить часть do. Как вы сказали, как только пользователь войдет в Q или q, программа закончится, потому что условие while будет оцениваться как false, а часть do больше не будет выполнена. Поэтому в этом случае цикл прекратится.

Что именно происходит при вводе Q или q? Часть do будет технически реализована, но ваши if-утверждения будут проигнорированы, так как они не удовлетворяют этим условиям. Как только проверка while будет достигнута, условие будет оцениваться как ложное, что приведет к завершению цикла. Если вы ввели что-то вроде M или g, то if-statements будут проигнорированы, но цикл не закончится, потому что условие while не будет оцениваться как false, поэтому программа снова спросит вас о температуре и градусах.

+0

Итак, с циклом do-while это приведет к выходу/завершению программы в любое время, когда пользователь вводит «Q»? Я только что видел ваше редактирование, это было очень полезно спасибо. У меня был кто-то, пытающийся сказать мне, что мне нужно было вложить всю программу в «по крайней мере» три цикла, чтобы заставить его работать правильно, я не уверен, почему, если он может так хорошо работать. – Tony

+0

@ Тони правильно, потому что если пользователь вводит 'Q' или' q', тогда программа будет игнорировать if-statements, и после того, как будет проверено условие цикла, цикл завершится, потому что 'letter' является значением, которое вызовет оценка для оценки на false –

+0

По какой-то причине моя IDE (я использую Eclipse) говорит мне, что она не может разрешить букву переменной внутри условий while. Это проблема с моей IDE или я что-то пропустил? – Tony

1

Я бы предложил помещать то, что у вас есть, в цикл while, который вырывается, если пользователь вводит «Q» или «q». Что-то похожее ниже:

// Declare your breaking condition variable outside the while loop 
boolean done = false; 
while (!done){ 
    // Your existing code here 
    // A conditional to check for 'Q' or 'q' 
    // set done to true if the above line evaluates as true. 
} 
Смежные вопросы