Java代码计算时长逻辑错误排查:输出24小时而非0小时
问题分析与代码修复
你的代码在测试时遇到了逻辑漏洞:当游戏的起始时间和结束时间在同一天(比如0点0分到0点10分),代码会错误输出“24 HORA(S) E 10 MINUTO(S)”,而正确结果应该是“0 HORA(S) E 10 MINUTO(S)”。
问题根源
你判断是否需要给结束时间加24小时的条件是if (y <= x),这个逻辑只比较了小时数,忽略了分钟数的影响。比如当起始时间是0点0分(x=0),结束时间是0点10分(y=0),此时y <= x成立,y被加24变成24,最终计算出的时长就成了24小时10分,这显然不符合实际。
正确的判断逻辑应该是比较结束时间的总分钟数是否小于起始时间的总分钟数,只有当结束时间更早(跨天)时,才需要加上24小时的分钟数来计算时长。
修复后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int startHour = sc.nextInt(); int startMinute = sc.nextInt(); int endHour = sc.nextInt(); int endMinute = sc.nextInt(); // 计算起始和结束时间的总分钟数 int startTotal = startHour * 60 + startMinute; int endTotal = endHour * 60 + endMinute; int durationTotal; if (endTotal < startTotal) { // 跨天的情况,加上一天的分钟数 durationTotal = (endTotal + 24 * 60) - startTotal; } else { // 同一天的情况,直接计算差值 durationTotal = endTotal - startTotal; } // 转换为小时和分钟 int hours = durationTotal / 60; int minutes = durationTotal % 60; System.out.println("O JOGO DUROU " + hours + " HORA(S) E " + minutes + " MINUTO(S)"); } }
修复说明
- 先将时间转换为总分钟数,避免单独比较小时数的逻辑错误
- 通过总分钟数的大小判断是否跨天,确保所有场景(同一天、跨天)都能正确计算时长
- 最后将总时长分钟数拆分回小时和分钟,输出符合要求的结果
内容的提问来源于stack exchange,提问作者user20343154
相关产品推荐
相关产品推荐

