向现有 java 程序添加循环?

Adding loops to an existing java program?

我需要修改我的程序,以便在需要时可以多次 运行 它。如果用户输入 Q 或 q 并且输入请求的条目(或退出命令)以外的任何内容,我需要退出程序,问题将重复出现。 这是我到目前为止的代码:

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");
        }
    }
}

在这种情况下,您应该使用 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 部分。正如您所说,一旦用户输入 Qq,程序就会结束,因为 while 条件的计算结果为 false,do 部分将不再执行。因此,在这种情况下循环将终止。

当您输入 Qq 时究竟会发生什么? do 部分在技术上会发生,但您的 if-statements 将被忽略,因为它不满足这些条件。一旦达到 while 检查,条件将评估为 false,导致循环结束。如果您输入类似 Mg 的内容,则 if-statements 将被忽略,但循环不会结束,因为 while 条件不会计算为 false,因此程序将再次询问您温度和度数。

我建议将您拥有的内容放入 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.
}