You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

do-while循环条件语句问题:Buzz数字筛选代码未达预期

问题分析与修复:Buzz数字筛选程序

你的代码核心问题是用同一个变量counter承担了两个完全不同的职责:它既是初始数的偏移量(用来生成下一个要检查的数字),又是已找到的Buzz数字的计数。这会导致非Buzz数字出现时,counter不递增,循环会一直重复检查同一个数字,永远凑不够你要的Buzz数字数量。

修复方案

把两个职责拆分到不同变量:一个变量跟踪当前检查的数字,另一个变量统计已找到的Buzz数字数量。

修复后的代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] input = scanner.nextLine().split(" ");
        
        long currentNumber = Long.parseLong(input[0]);
        int targetCount = Integer.parseInt(input[1]);
        int buzzCount = 0;

        while (buzzCount < targetCount) {
            if (isBuzz(currentNumber)) {
                System.out.println(currentNumber + " is a Buzz number");
                buzzCount++;
            }
            // 不管是不是Buzz数字,都检查下一个数
            currentNumber++;
        }
        scanner.close();
    }
    
    public static boolean isBuzz(long number) {
        boolean isDivisible = number % 7 == 0;
        boolean endsWith7 = number % 10 == 7; // 用取模代替字符串操作,更高效
        return isDivisible || endsWith7;
    }
}

关键改动说明

  1. 拆分变量职责:
    • currentNumber:从初始数开始,每次循环都递增,确保我们按顺序检查每一个数字
    • buzzCount:只在找到Buzz数字时递增,直到达到用户指定的目标数量
  2. 优化isBuzz方法:用number % 10 == 7代替字符串转换判断末位,性能更优且代码更简洁
  3. 修正类名:Java规范中类名首字母大写,把main改成Main

原代码问题详解

原代码中,当遇到非Buzz数字时,counter不会递增,导致nextNumber永远是初始数 + 同一个counter,循环会无限重复检查这个非Buzz数字,永远无法满足counter < 目标数量的循环条件,自然得不到预期结果。

内容的提问来源于stack exchange,提问作者Ruzvelt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:35:40