Celsius-to-Fahrenheit转换器程序中的语法错误

时间:2015-03-11 23:50:49

标签: java

我必须允许用户选择要执行的转换以及开始的转换程度,然后打印从该程度开始直到接下来的9次转换(10次转换)。我必须使用回调函数来编写它。一开始还有一个菜单。我有一个“没有,否则”在线。我的回调函数也没有正确计算数字。如何解决此错误并修复我的回调函数?

import java.util.Scanner;

public class FahrToCel {

    public static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {

        double choice = 0;
        double fahrenheit = 0;
        double celsius = 0;
        double answer = 0;


        //print the welcome message and the menu options for the user
        System.out.printf("Welcome to Candace's Fahrenheit and Celsius "
            + "convertor. ");
        System.out.printf("Please choose one of the following options: \n"
            + " Press 0 to exit \n Press 1 to to convert to Celsius \n"
            + " Press 2 to convert to Fahrenheit >  ");
        choice = input.nextInt();

        //print what happens when the user hits a button
        if (choice == 0){ 
            // the user is going to exit the game
            System.out.printf("Well hopefully you can play again soon! :) ");
        } else {
            //perform code for the operation
            for ( double i = fahrenheit; i >-100; i-=10 ){
                if (choice == 1) { 
                    // it will convert from fahrenheit to celsius
                    System.out.printf("Please pick a number in Fahrenheit: > ");
                    fahrenheit = input.nextDouble();
                    celsius = FahrToCel();
                    System.out.printf("%f ", i);
                }
            }
            for ( double i = celsius; i >-10; i-=10 ){
                if (choice == 2){ 
                    // it will convert from celsius to fahrenheit
                    System.out.printf("Please pick a number in celsius: > ");
                    celsius = input.nextDouble();
                    fahrenheit = CelToFahr();
                    System.out.printf("%f ", i);
                }
            } 

        } else {
            System.out.printf("I'm sorry, I did not ask you to enter that "
                + "number. ");
        }
    }

    public static double CelToFahr(){
        double celsius = 0;
        double fahrenheit = 0;
        celsius = (fahrenheit - 32) * (5.0/9.0);
        return celsius;
    }

    public static double FahrToCel( ){
        //perform the conversion for fahrenheit to celsius
        double celsius = 0;
        double fahrenheit = 0;
        fahrenheit = ((9.0/5.0) + 32) * celsius;
        return fahrenheit;

    }

}

2 个答案:

答案 0 :(得分:1)

您正在寻找像这样的结构

if (choice == 0){
    // ...
}
else if (choice == 1) {
    for ( double i = fahrenheit; i >-100; i-=10 ){
        // ...
    }
}
else if (choice == 2) {
    for ( double i = celsius; i >-10; i-=10 ){
        // ...
    }
}
else {
    // ...
}

现在你在else中有一些if语句,你的范围变得混乱了。然后你的循环将进入其他if语句。另请注意,您正在进行多次转换,但每次打印输入的初始值,而不是转换后的温度。

答案 1 :(得分:0)

除此之外,(编辑)你的一个功能是不对的。由于它们涉及数学,我提供修改而不是提示。

我不知道你是否希望传递你转换的价值,但这样做会让它变得更好。

你绝对不想在两个函数中将摄氏温度和华氏温度设置为零。

public static double FahrToCel(double fahrenheit ){
   double celsius;
   celsius = (fahrenheit - 32) * (5.0/9.0);
   return celsius;
 }

public static double CelToFahr( double celsius){
    //perform the conversion for fahrenheit to celsius
    double fahrenheit;
    fahrenheit = ((9.0/5.0) ) * celsius + 32;
    return fahrenheit;

这意味着在for循环内部,对函数的调用必须类似于:

            celsius = input.nextDouble();
            fahrenheit = CelToFahr(celsius);

但是如果我正确地阅读for循环的说明和意图,我不确定你应该输入下一个摄氏值。

也许你想要这个而不是输入:

celsius = i;