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

Java补零逻辑实现及Clock测试类输出异常排查求助

Hey there! Let's work through your two tech problems step by step—starting with the Clock display issue since you've shared code and test results that make it easier to diagnose.

Problem 2: Redundant Zeros in Clock Minute Output

Looking at your test results, you're getting outputs like 00:024 instead of 00:24 and 012:023 instead of 12:23. The root cause is your getDisplayValue() method in NumberDisplay has flawed logic, plus there are bugs in increment() and the Clock's timeTick() method. Let's fix these one by one:

1. Fix getDisplayValue()

Your current code adds a zero before the value no matter what when the maxLimit has 2 digits, which is why 24 becomes "024". The correct behavior is to pad the value with leading zeros only to match the number of digits in maxLimit (e.g., maxLimit=59 is 2 digits, so 4 → "04", 24 → "24", 0 → "00").

Replace your existing getDisplayValue() with this cleaner, correct version:

public String getDisplayValue() {
    // Get the number of digits our output should match (based on maxLimit)
    int targetLength = String.valueOf(maxLimit).length();
    // Use String.format to pad with leading zeros to reach the target length
    return String.format("%0" + targetLength + "d", value);
}

2. Fix increment() in NumberDisplay

Your current code has two bugs here:

  • this.value = +1; sets the value to 1 instead of incrementing it by 1
  • The wrapped flag isn't being reset correctly for non-wrap increments

Here's the fixed version:

public void increment() {
    wrapped = false; // Default to no wrap
    if (this.value == maxLimit) {
        this.value = minLimit;
        wrapped = true; // Only set to true when we wrap around
    } else {
        this.value += 1; // Actually increment the value
    }
}

3. Fix diWrapAround()

Your current method is modifying the wrapped flag instead of just returning its current state. Simplify it to:

public boolean diWrapAround() {
    return wrapped;
}

4. Fix timeTick() in Clock

Your timeTick() wasn't updating the display string after incrementing the minutes, which is why the output stayed the same after calling it. Also, you need to increment the hours when the minutes wrap around:

public void timeTick() {
    this.minutes.increment();
    // If minutes wrapped around, increment hours
    if (this.minutes.diWrapAround()) {
        this.hours.increment();
    }
    // Update the display string to reflect the new time
    this.updateDisplay();
}

Problem 1: Return "0" (or padded zero) When Reaching Max Length

I think what you mean is: when the NumberDisplay reaches its maxLimit and increments, it should reset to minLimit and display the correctly padded zero string (like "00" for minutes, "0" for a single-digit display). The fixes above already handle this! For example:

  • When minutes hit 59, incrementing will reset to 0, and getDisplayValue() will return "00" (matching the 2-digit length of maxLimit=59)
  • If you had a display with maxLimit=9, resetting to 0 would return "0"

Quick Note on Your Test Case

I noticed a small mistake in your Test2 code: when you call timeTick() on a Clock set to 0:24, you expected 00:01, but that's incorrect—24 + 1 is 25. The 00:01 result would only happen if you incremented until minutes hit 59, then once more to wrap to 0.

Other Minor Cleanup

  • In your NumberDisplay constructor, your comment says the range is "minLimit to maxLimit" but you set maxLimit = maxLimit -1—this is correct for clock logic (hours 0-23, minutes 0-59), just make sure your documentation matches.
  • In setValue(), your error message mixes Swedish and English—you might want to make this consistent for clarity.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:39