java - 二进制到十进制转换器的输入验证
问题描述
我必须为分配创建二进制到十进制数字转换器。此任务有限制。它们是:1.没有无限循环 2.Break 语句退出循环 3.没有标签或转到语句 4.没有使用 Integer.parseInt (String s, int radix)
我得到了部分转换,但我在异常处理方面遇到了麻烦。我试图在输入不是二进制时显示错误消息并继续允许用户输入,每次无效尝试都显示相同的错误消息。
我试图用 while 和 do-while 循环替换 for 循环,但它最终对我来说太混乱了。
我还尝试在 for 循环中嵌套 if 语句,但无法弄清楚如何实现 userInput 以在弹出错误消息后继续让用户输入输入。
long binaryNumber = 0, baseTen = 0;
String userInput;
int i;
boolean okay;
//Asks user to input binary number
System.out.println("Enter a binary number.");
userInput = in.nextLine();
for (i = 0; i <= userInput.length() - 1; i++) {
char digit = userInput.charAt(i);
//Checks if characters other than 1 or 0 is present
if ((digit != '1') || (digit != '0') {
System.err.println("Try again");
okay = false;
}
//Converts binary to decimal
if (digit == '1') {
binaryNumber += Math.pow(2, (userInput.length() - i)) / 2;
okay = true;
} else if (digit == '0') {
binaryNumber += 0;
okay = true;
}
解决方案
如果您使用另一个else
语句,那么您可以设置okay
为 false 并检查okay
for 循环之后的值,并在打印错误消息后再次检查整个过程。当然,设置okay
为 false 后,您可以中断并停止解析输入。
您也可以抛出异常,而不是设置okay
为 false 和中断,捕获异常,然后从更高级别的方法重新启动过程。但是,输入无效数据的用户可能不应该算作例外;你应该总是期待错误的输入。
推荐阅读
- c# - 如何从 C# 代码将 *& 和 **& 参数传递给 C++ dll
- python - 使用 append() 和 DataFrame.columnName 添加熊猫列值,但数据框中没有更新列值
- javascript - 如何从 firestore 获取 ID 到对象数组中?
- python - python中循环中的多重求和
- python - 使用 signals.py 更新模型字段 ( SearchVector )
- java - Android - CustomApplication 中的类转换异常
- join - 2个表之间的不同连接
- javascript - 如何从函数中多次产生价值?
- django - Django,如何在不创建新文件/django_session 行的情况下测试迁移
- node.js - “模板启动”命令在 ./assets/js/theme/account.js 中显示错误 模块构建失败