如何实现计算器前两输入仅接受数字并循环?int转boolean报错求助
解决Java数字输入的循环校验问题
你已经实现了运算符输入错误时的循环校验逻辑,但在给num1、num2做数字输入校验时,直接将int类型变量放入if判断会触发“无法将int转换为boolean”的错误——这是因为int是数值类型,不能直接作为布尔条件使用。要实现前两个输入仅接受数字并循环至正确的功能,可以利用Scanner的输入校验方法来处理,以下是修改后的完整代码:
import java.util.Scanner; public class Main { // 类名首字母大写符合Java规范 public static void main(String[] args) { int num1; int num2; String operator; Scanner scan = new Scanner(System.in); // 处理第一个数字输入 System.out.print("tell me first number: "); while (!scan.hasNextInt()) { System.out.print("wrong input! try again!: "); scan.next(); // 读取并丢弃错误输入,避免死循环 } num1 = scan.nextInt(); // 处理第二个数字输入 System.out.print("tell me second number: "); while (!scan.hasNextInt()) { System.out.print("wrong input! try again!: "); scan.next(); // 读取并丢弃错误输入,避免死循环 } num2 = scan.nextInt(); // 运算符校验逻辑(保留你原有的实现) System.out.print("tell me operator: "); operator = scan.next(); while(true) { if(operator.equals("+")) { System.out.println("answer is: " +(num1 + num2)); break; } else if(operator.equals("-")) { System.out.println("answer is: " +(num1 - num2)); break; } else if(operator.equals("*")) { System.out.println("answer is: " +(num1 * num2)); break; } else if(operator.equals("/")) { System.out.println("answer is: " +(num1 / num2)); break; } else { System.out.print("wrong input! try again!: "); operator = scan.next(); } } scan.close(); // 关闭Scanner资源 } }
关键说明:
scan.hasNextInt():该方法会检查输入缓冲区的下一个内容是否为整数,返回布尔值,刚好满足循环的条件判断需求scan.next():当输入不是整数时,必须用这个方法读取并丢弃错误输入,否则错误内容会一直留在缓冲区,导致hasNextInt()永远返回false,触发死循环- 额外调整:将类名改为
Main(符合Java命名规范),添加scan.close()关闭资源,避免资源泄漏
内容的提问来源于stack exchange,提问作者spinandspin
相关产品推荐
相关产品推荐

