1

我需要一些代码来判断某些用户输入是否为double. 如果是double,我需要将它存储在变量中degreeCelsius,如果不是,我需要程序退出。总体而言,该程序将采用一些double值并将它们用作摄氏度并将它们转换为华氏度。这是我到目前为止所拥有的:

import java.util.*;
public class Lab4b
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        double degreeCelsius = 0.0;
        double degreeFahrenheit = 0.0;
        System.out.println("Celcius    | Fahrenheit");

        while(scan.next() != null)
            {    
//this is where I need the code. If you see any other errors, feel free to correct me
            //if (degreeCelsius = Double)
                    {
                        degreeCelsius = scan.nextDouble();
                    }
                else
                    {
                        System.exit(0);
                    }
                degreeFahrenheit = degreeCelsius * (9.0/5.0) + 32.0;
            }
    }
}
4

6 回答 6

1

由于您可能无法输入双精度,因此最好读取字符串,然后尝试将其转换为双精度。标准模式是:

Scanner sc = new Scanner(System.in);
double userInput = 0;
while (true) {
    System.out.println("Type a double-type number:");
    try {
        userInput = Double.parseDouble(sc.next());
        break; // will only get to here if input was a double
    } catch (NumberFormatException ignore) {
        System.out.println("Invalid input");
    }
}

在输入双精度值之前,循环不能退出,之后userInput将保持该值。

另请注意,通过将提示放入循环中,您可以避免无效输入上的代码重复。

于 2013-09-18T06:36:24.347 回答
0

您可以使用以下方法检查您的输入字符串是否为双精度。

public boolean isDouble(String inputString) {
    try {
            Double d=Double.parseDouble(inputString);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}
于 2013-09-18T05:35:13.510 回答
0

使用Double.parse方法。请参阅此处的文档。

使用上述方法,解析用户输入并捕获NumberFormatException. 任何不可双解析的用户输入都会引发异常,您可以在其中中断循环。

于 2013-09-18T05:10:10.687 回答
0

尝试这个

while (scan.hasNext()) {
   if (scan.hasNextDouble()) {
      double d = scan.nextDouble();
      ...
   } else {
      ...
于 2013-09-18T05:28:57.773 回答
0

这是修改 while 的一种方法:

    while(scan.hasNextDouble()) {
        degreeCelsius = scan.nextDouble();
        degreeFahrenheit = degreeCelsius * (9.0/5.0) + 32.0;
        System.out.println(degreeCelsius + " in Celsius is " + degreeFahrenheit + " in Fahrenheit");

    }

请记住,由于 Unix 和 Windows 的默认终端设置,扫描仪通过空格分解输入的事件,您通常仍需要在条目之间按 Enter。

所以在这里了解更多信息:

如何从 Java 中的控制台读取单个字符(当用户键入时)?

于 2013-09-18T03:23:49.403 回答
0
import java.util.Scanner;

public class TempConversion
{
    public static void main(String []args)
    {
        Scanner scan = new Scanner(System.in);
        String degSymbol = "\u00b0"; // unicode for the 'degree' symbol 

        do {
            try {
                System.out.print("\nEnter temperature or press q to exit: ");
                String input = scan.next();
                if (input.equals("q") || input.equals(" ")) {
                    System.exit(0);
                } else {
                    double temp_input = Double.parseDouble(input);

                    System.out.printf("What unit of temp is %,.2f? " +
                                      "\nCelsius\nFarenheit\nKelvin: ", temp_input);
                    char unit_from = scan.next().toUpperCase().charAt(0);

                    System.out.printf("\nConvert %,.2f%s%c to what unit? " +
                                      "\nCelsius\nFarenheit\nKelvin: ", 
                                      temp_input, degSymbol, unit_from);
                    char unit_to = scan.next().toUpperCase().charAt(0);

                    String convert = Character.toString(unit_from) +
                                     Character.toString(unit_to);

                    switch(convert) {
                    case "CF": //celsius to farenheit
                        double temp_results = (9.0/5.0) * temp_input + 32;
                        System.out.printf("\nRESULT: %,.2f\u00b0%c = %,.2f\u00b0F\n", 
                                          temp_input, unit_from, temp_results);   
                        break;
                    case "FC": // farenheit to celsius
                        temp_results = (5.0/9.0) * (temp_input - 32);
                        System.out.printf("\nRESULT: %,.2f\u00b0%c =     %,.2f\u00b0C\n",
                                          temp_input, unit_from, temp_results);
                        break;
                    case "CK": //celsius to kelvin
                        temp_results = temp_input + 273.15;
                        System.out.printf("\nRESULT: %,.2f%s%c = %,.2f%sK\n", temp_input,
                                          degSymbol, unit_from, temp_results, degSymbol);
                        break;
                    case "FK": // farenheit to kelvin
                        temp_results = (temp_input + 459.67) * 5.0/9.0;
                        System.out.printf("\nRESULT: %,.2f%s%c = %,.2f%sK\n", temp_input,
                                          degSymbol, unit_from, temp_results, degSymbol);
                        break;
                    case "KF": // kelvin to farenheit
                        temp_results = temp_input * 9.0/5.0 - 459.67;;
                        System.out.printf("\nRESULT: %,.2f%s%c = %,.2f%sF\n", temp_input,
                                          degSymbol, unit_from, temp_results, degSymbol);
                        break;
                    case "KC": // kelvin to celsius
                        temp_results = temp_input - 273.15;
                        System.out.printf("\nRESULT: %,.2f%s%c = %,.2f%sC\n", temp_input,
                                          degSymbol, unit_from, temp_results, degSymbol);
                        break;
                    default:
                        System.out.println("\nERROR: One or more variables you entered " +
                                           "are invalid. Please try again.");
                        break;
                    } // ends switch
                } // ends else
            } catch (NumberFormatException ignore) {
                System.out.println("Invalid input.");
            }
        } while(true); //ends do
    } // ends main
} // ends class
于 2018-06-07T09:14:07.357 回答