我必须允许用户选择要执行的转换以及开始的转换程度,然后打印从该程度开始直到接下来的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;
}
}
答案 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;