java - java中的循环和用户输入验证,再次
问题描述
所以,我想两天前我问了一个关于输入验证的问题,以及如何循环程序直到用户给出有效的输入..
所以我做了一个计算器,我想循环程序的每一步,这样如果用户没有输入double
(69, 42.0) 或适当的运算符char
(/, *, +, -) 他们就会卡在那个步骤直到他们做对或以其他方式完全关闭应用程序。
所以我从最后一个问题中得到的一件事是,我可以创建一个boolean
名为“restart”或其他东西的值,然后封装我的整个代码,除了main
method
明显的,最后我可以提出一个他们可以回答的问题,true
或者false
整个应用程序可以再次运行。虽然我承认在我的应用程序上有一个“重新开始”按钮很酷并且对我所有其他项目都很有用(可能不是,我相信这可以更有效地完成),但它仍然没有让我和我原来的问题感到满意.
所以...
我必须尽我所能(我知道堆栈喜欢那些表明他们至少尝试过的人)。
例 1
Scanner input = new Scanner(System.in);
double valX;
System.out.println("Calculator Activated.");
do
{
System.out.print("Value X: ");
valX = input.nextDouble();
}while (!input.hasNextDouble());
{
System.out.println("Invalid number!");
}
//Didn't work ¯\_(ツ)_/¯
例 2
Scanner input = new Scanner(System.in);
double valX;
System.out.println("Calculator Activated.");
while (!input.hasNextDouble())
{
System.out.println("Value X: ");
valX = input.nextDouble();
}
//neither this one...
请注意,你们给我的解决方案必须适用于程序的每一步。
为了更清楚一点,整个 src 代码没有我尝试过的东西和“重启”循环。
import java.util.Scanner;
public class CalTest
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
double valX, valY, divided, multiplied, added, subtracted; //Declared all my variables...
char operator;
boolean restart; //Didn't need to declare it true or false since I'm using a Scanner anyway
do //Start of the entire program
{
System.out.println("Calculator Activated.");
System.out.print("Value X: "); //I need a loop here...
valX = input.nextDouble();
System.out.print("Operator: "); //And here...
operator = input.next().charAt(0);
System.out.print("Value Y: "); //And here too..
valY = input.nextDouble();
divided = valX / valY;
multiplied = valX * valY;
added = valX + valY;
subtracted = valX - valY;
if (operator == '/')
System.out.println("Result: " + divided );
else if (operator == '*')
System.out.println("Result: " + multiplied); //<--Not sure if I need a loop with the if's
else if (operator == '+')
System.out.println("Result: " + added);
else if (operator == '-')
System.out.println("Result: " + subtracted);
else
System.out.println("Invalid operator!");
System.out.print("Try again? "); //I also need a loop here, I think.
restart = input.nextBoolean();
} while (restart); //End of it if you declared false.
System.out.println("Calculator terminated.");
}
}
有一次,我尝试使用相同的“重新启动应用程序”概念,并为代码中的每一步都创建了一个布尔变量,老实说,这很烦人,不值得。
另外,我只是一个初学者,如果它是我所缺少的循环概念,那么我很高兴向你们学习。
再次感谢任何回答并帮助我学习的人。
解决方案
CalTest
在您分配的类中的最终代码示例中,valX = input.nextDouble();
您可以调用递归方法来处理异常,直到输入是您想要的。像这样的东西:
private static double getNextDouble(Scanner input) {
try {
return input.nextDouble();
} catch (InputMismatchException e) {
System.out.println("Value X must be a number: ");
input.next();
return getNextDouble(input);
}
}
您将替换valX = input.nextDouble();
为valX = getNextDouble(input);
.
您可以整理它并使其适用于您的其他潜在错误情况,也许为输出消息创建一个参数并将其作为参数传递。
推荐阅读
- openedx - OpenEdX,IRONWOOD - 重定向问题
- python - 无法安装 Pynput 或键盘
- networking - 使用数据包跟踪器的 ASA 配置
- python - get_cog 不返回加载的 cog,而是返回 None
- salesforce - 在 Mule 4 中使用 Dataweave 将 base64 转换为 byte[]
- html - 我不能在 XML 中使用标签来引用特定的部分?
- python - AttributeError:“WebDriver”对象没有属性“switch_to_window_handles”
- mongodb - 有没有办法知道文档中的哪个 mongoDB 字段最后更新了?
- react-native - 用 flex 反应原生渲染无用的间隙(区域)问题
- python - 每次我们想在时间序列模型中生成新的预测时,我们都必须重新训练我们的模型吗?