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

Java公交发车时间查询程序异常:输入2243返回2260而非2300求解

问题原因
  • 时间拆分逻辑缺失:输入的2243是「22点43分」的语义化表示,原代码直接将其作为普通整数做取模运算,没有拆分出独立的小时、分钟字段,计算得到的增量直接加在原整数上,自然会出现分钟位到60不进位的问题。
  • 分支判断顺序错误:处理分钟进位的else if分支写在了非整点发班判断的后面,只要当前时间不是刚好赶上发车,就会被第一个if分支拦截,进位逻辑永远不会触发。
  • 变量类型不合理:时间是离散的整数值,用double类型存储输入存在精度溢出的风险,完全没有必要。
修复方案
  1. 先把输入的四位整数拆分为小时、分钟两个独立字段,比如2243拆为hour=22、minute=43
  2. 基于分钟字段计算下一个20分钟倍数的发班分钟数,如果当前分钟刚好是0/20/40,直接使用当前分钟
  3. 处理分钟进位逻辑:如果计算得到的发班分钟≥60,分钟减60,小时加1,可额外加24小时归0的逻辑处理跨天场景
  4. 最后将小时、分钟拼接为四位格式输出,分钟不足两位自动补0
修复后代码
import java.util.Scanner;

public class Nc3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter time of arrival: ");
        int arrivalTime = input.nextInt();
        // 拆分小时、分钟
        int hour = arrivalTime / 100;
        int minute = arrivalTime % 100;
        
        // 计算下一班发班分钟
        int nextMinute = ((minute / 20) + 1) * 20;
        // 刚好赶上当前班次的特殊处理
        if (minute % 20 == 0) {
            nextMinute = minute;
        }
        
        // 处理分钟满60进位
        if (nextMinute >= 60) {
            nextMinute -= 60;
            hour += 1;
            // 跨天处理,不需要可以删掉
            if (hour >= 24) {
                hour = 0;
            }
        }
        
        // 格式化输出
        if (nextMinute == minute) {
            System.out.printf("Now - %d%02d%n", hour, nextMinute);
        } else {
            System.out.printf("%d%02d%n", hour, nextMinute);
        }
        input.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:48:02