首页 > 解决方案 > 二进制到十进制转换器的输入验证

问题描述

我必须为分配创建二进制到十进制数字转换器。此任务有限制。它们是: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;
                }

标签: java

解决方案


如果您使用另一个else语句,那么您可以设置okay为 false 并检查okayfor 循环之后的值,并在打印错误消息后再次检查整个过程。当然,设置okay为 false 后,您可以中断并停止解析输入。

您也可以抛出异常,而不是设置okay为 false 和中断,捕获异常,然后从更高级别的方法重新启动过程。但是,输入无效数据的用户可能应该算作例外;你应该总是期待错误的输入。


推荐阅读