求助:统计指定数值范围内包含数字4的整数个数
统计数值范围内包含数字4的整数个数问题解答
我明白你现在需要实现一个功能:统计给定两个整数之间(包含两端)所有含有数字4的整数的个数,比如1-100范围内符合条件的数有19个。看你已经写了部分Java代码但卡住了,我来帮你把代码补全并解释清楚关键逻辑。
首先,先看你未完成的代码里的小问题:你把Scanner对象放在了while(true)循环内部,这样每次循环都会创建新的Scanner实例,容易造成资源浪费;另外num2的输入代码没写完。我们先把这些问题修正,再实现核心的判断逻辑。
完整实现代码
import java.util.Scanner; public class Main { public static void main(String[] args) { int count = 0; Scanner input = new Scanner(System.in); // 将Scanner放在循环外,避免重复创建 while (true) { System.out.println("请输入两个整数(用空格分隔,输入非整数可退出):"); if (!input.hasNextInt()) { System.out.println("输入结束,程序退出"); break; } int num1 = input.nextInt(); int num2 = input.nextInt(); // 确保num1是较小值,num2是较大值,处理用户输入顺序颠倒的情况 int start = Math.min(num1, num2); int end = Math.max(num1, num2); count = 0; // 遍历范围内的每个数,检查是否包含数字4 for (int i = start; i <= end; i++) { if (containsFour(i)) { count++; } } System.out.printf("在%d到%d范围内,包含数字4的整数共有%d个%n", start, end, count); } input.close(); // 关闭Scanner资源 } // 辅助方法:判断一个整数是否包含数字4 private static boolean containsFour(int num) { // 处理负数的情况(如果用户输入负数) num = Math.abs(num); do { int digit = num % 10; if (digit == 4) { return true; } num = num / 10; } while (num > 0); return false; } }
关键逻辑解释
- Scanner资源优化:把
Scanner实例放在循环外部创建,循环结束后关闭,避免重复创建和销毁资源。 - 范围边界处理:用
Math.min和Math.max确保遍历的起始值是较小数,结束值是较大数,不管用户输入的顺序如何都能正确统计。 - 数字判断辅助方法:
containsFour方法专门负责判断单个数字是否包含4,通过取余和整除操作逐位检查每一位数字,同时处理了负数的情况(如果用户输入负数的话)。 - 循环退出逻辑:当用户输入非整数时,程序会退出循环,避免无限循环无法终止。
测试验证
当你输入1 100时,程序会输出在1到100范围内,包含数字4的整数共有19个,和你给出的示例结果一致,验证了逻辑的正确性。
内容的提问来源于stack exchange,提问作者Zuher Abud
相关产品推荐
相关产品推荐

