编辑:只想对所有迄今为止帮助过的人表示感谢!我是Java新手,我的教授推荐这个网站寻求外界的帮助。到目前为止一直很棒。我将花一些时间研究代码并实施我收到的建议。谢谢!
我正在尝试创建一个程序,将温度从华氏度转换为摄氏度,反之亦然。如果用户没有输入正确的单位,程序将循环返回并要求他们重新进入单位或输入Q退出程序。这就是我到目前为止所做的:
我的想法是将一个循环合并到我的switch语句的默认部分,但我不确定使用哪个循环(可能是?)会循环回来并要求用户重新输入单位或Q放弃。任何帮助真的非常感谢!我已经被困在这几个小时了!
System.out.print("\tEnter 'F' (or 'f') for Fahrenheit or "
+ "'C' (or 'c') for Celcius: ");
f_or_c = console.next();
double fahrenheit = 5*(temperature-32)/9;
double celcius = (9*(temperature)/5)+32;
switch (f_or_c) {
case "C":
case "c":
System.out.println("\n\t" + temperature + " " + " degrees Celcius "
+ "= " + celcius + " degrees Fahrenheit.");
break;
case "F":
case "f":
System.out.println("\n\t" + temperature + " " + " degrees Fahrenheit "
+ "= " + fahrenheit + " degrees Celcius.");
break;
default:
System.out.println("\n\tUnknown units -"
+ "\n\tCannot do calculation -"
+ "\n\tPlease next time enter either 'F' for Fahrenheit or 'C' Celcius");
System.out.print("\nEnter 'Q' to quit or " +
"any other character to perform another temperature conversion: ");
break;
答案 0 :(得分:0)
你可以使用while循环。有更好的方法来做到这一点。但只是帮助您使用代码。
System.out.print("\tEnter 'F' (or 'f') for Fahrenheit or "
+ "'C' (or 'c') for Celcius: ");
f_or_c = console.next();
boolean flag=false;
double fahrenheit = 5*(temperature-32)/9;
double celcius = (9*(temperature)/5)+32;
while(true) {
switch (f_or_c) {
case "C":
case "c":
System.out.println("\n\t" + temperature + " " + " degrees Celcius "
+ "= " + celcius + " degrees Fahrenheit.");
flag=false;
break;
case "F":
case "f":
System.out.println("\n\t" + temperature + " " + " degrees Fahrenheit "
+ "= " + fahrenheit + " degrees Celcius.");
flag=false;
break;
default:
System.out.println("\n\tUnknown units -"
+ "\n\tCannot do calculation -"
+ "\n\tPlease next time enter either 'F' for Fahrenheit or 'C' Celcius");
System.out.print("\nEnter 'Q' to quit or " +
"any other character to perform another temperature conversion: ");
flag=true;
break;
}
if(flag)
continue;
break;
}
答案 1 :(得分:0)
让我们通过逻辑思考:你想循环直到用户输入正确的输入。那么,这是否意味着在开始循环之前你会知道循环应迭代多少次?这是关键。
一旦你知道这些信息,正确的循环就会失败,因为:
答案 2 :(得分:0)
将switch语句放入方法中,然后针对默认情况调用该方法。它正在使用递归,但请记住,如果将来使用递归,请确保它不会无限循环,否则会出现堆栈溢出错误。
答案 3 :(得分:0)
do{}while()
怎么样?
boolean badInput;
do {
badInput = false;
System.out.print("\tEnter 'F' (or 'f') for Fahrenheit or "
+ "'C' (or 'c') for Celcius: ");
f_or_c = console.next();
double fahrenheit = 5*(temperature-32)/9;
double celcius = (9*(temperature)/5)+32;
switch (f_or_c) {
case "C":
case "c":
System.out.println("\n\t" + temperature + " " + " degrees Celcius "
+ "= " + celcius + " degrees Fahrenheit.");
break;
case "F":
case "f":
System.out.println("\n\t" + temperature + " " + " degrees Fahrenheit "
+ "= " + fahrenheit + " degrees Celcius.");
break;
default:
System.out.println("\n\tUnknown units -"
+ "\n\tCannot do calculation -"
+ "\n\tPlease next time enter either 'F' for Fahrenheit or 'C' Celcius");
System.out.print("\nEnter 'Q' to quit or " +
"any other character to perform another temperature conversion: ");
badInput = true; //we got bad input so we'll continue looping
break;
} while(badInput);
基本上我们在开始时将badInput
设置为false,假设它是好的输入。如果我们最终得到错误的输入,我们会badInput
为真,所以我们将继续循环。
do-while
和while
循环之间的一般区别是do-while
用于要至少执行一次的代码。它在这种情况下运行良好,因为您知道您想要至少读取一次输入。
在我的示例中,变量badInput
称为flag
。基本上,一个标志只是一个变量,可以跟踪某些事情是否在" on"或"关闭"。在这种情况下,badInput
正在跟踪我们是否输入错误。这是一个简单的" on" " off"," true" "假"场景。
答案 4 :(得分:0)
我可能会在这里改变你的思维方式,但我会以不同的方式实施它。绕开关盒缠绕一圈。这将确保使用下一个用户输入值重新执行开关案例。我已经包含了一个它可能是什么样子的例子。请注意,我还没有包含输入代码,因为有很多选项供您使用。此外,我还没有包含退出代码,它只会打破循环。
bool repeat = TRUE;
while (repeat)
{
switch (f_or_c)
{
case "C":
case "c":
System.out.println("\n\t" + temperature + " " + " degrees Celcius "
+ "= " + celcius + " degrees Fahrenheit.");
repeat = FALSE;
break;
case "F":
case "f":
System.out.println("\n\t" + temperature + " " + " degrees Fahrenheit "
+ "= " + fahrenheit + " degrees Celcius.");
repeat = FALSE;
break;
case "Q":
***YOUR CODE TO QUIT***
repeat = FALSE;
break;
default:
System.out.println("\n\tUnknown units -"
+ "\n\tCannot do calculation -"
+ "\n\tPlease next time enter either 'F' for Fahrenheit or 'C' Celcius");
System.out.print("\nEnter 'Q' to quit or " +
"any other character to perform another temperature conversion: ");
***CODE TO PROMPT USER FOR F_OR_C VALUE***
repeat = TRUE;
break;
}
}