CodeGym
促销活动
CodeGym University
学习
课程
任务
调查和小测验
游戏
帮助
提醒时间表
社区
用户
论坛
聊天
文章
成功故事
活动
评论
订阅服务
浅色主题
立即开始学习
  • 全部问题
wedfrgt
第 8 级
  • 22.02.2021
  • 494次阅读
  • 4个评论

为什么以我的代码,本地运行时一切正常,而当我去点击验证的时候,提示有无限循环?

有关 任务的问题 蒙眼过马路
Java 语法,  第 4 级,  课程 4
已解决

行人交通信号灯的编程如下:
在每小时开始时,绿色信号灯点亮三分钟,
接下来黄色信号灯点亮一分钟,
然后红色信号灯点亮一分钟。
接下来绿色信号灯再次点亮三分钟,以此类推。
使用键盘输入一个实际的数字 t,用于表示从小时开始后经过的分钟数。
确定在指定时间什么颜色的交通信号灯处于点亮状态。
按如下所示显示结果:
如果绿灯点亮,则为“绿色”,
如果黄灯点亮,则为“黄色”,
如果红灯点亮,则为“红色”。

例如,对于 2.5:
绿色
例如,对于 3:
黄色
例如,对于 4:
红色
例如,对于 5:
绿色

要求:
  • 程序应从键盘读取一个实际数字。
  • 该程序应在屏幕上显示文本。
  • 如果绿灯点亮,则显示:“绿色”
  • 如果黄灯点亮,则显示:“黄色”
  • 如果红灯点亮,则显示:“红色”
package zh.codegym.task.task04.task0416; /* 蒙眼过马路 */ import java.io.*; import java.util.Scanner; public class Solution { public static void main(String[] args) throws Exception { //在此编写你的代码 boolean b = true; double num = input(); while (b == true) { if (num >= 0 && num <= 4) { if (num >= 0 && num < 3) { System.out.println("绿灯"); } else { if (num >= 3 && num < 4) { System.out.println("黄灯"); } if (num >= 4 && num < 5) { System.out.println("红灯"); } } b = false; } else num -= 5; } } public static Double input() { Scanner scanner = new Scanner(System.in); return scanner.nextDouble(); } }
0
评论 (4)
  • 受欢迎
  • 新
  • 旧
你必须先登录才能发表评论
云梦
级别 6 ,不在列表中,China
22 二月 2021, 14:26
如果num在4(不包含)到5(不包含)之间就会出现无限循环的问题 比如 num = 4 第一次循环 第一个判断if(num >= 0 && num < 3),判断不满足转跳到else num = num -5 //num = 4-5 = -1 第二次循环 第一个判断if(num >= 0 && num < 3),判断不满足转跳到else num = num -5 //num = -1-5 = -6 这样就会一直进行循环 把第一个判断条件改为num >= 0 && num < 5 就可以了 还有一个建议就是再写这种区间判断的时候推荐下面这样子些更加容易理解 if(0 <= num && num < 5)
+1
wedfrgt
级别 8 ,China
23 二月 2021, 09:08
是的,我现在看出我哪里有错了,非常感谢! 然后对于你的那个建议,我觉得确实更容易理解,再次感谢!XD
0
Guadalupe Gagnon
级别 37 ,Tampa,United States
22 二月 2021, 14:18
The problem with this code is 17. If the user enters anything between 4.1 and 4.9 (or anything that continually subtracting 5 will result in 4.1 to 4.9) this line will be false, line 30 will subtract 5 from the number, the new number will be less than 0, then line 17 will always be false since once you get to a negative number the code just subtracts 5 from that infinitely. You will need to revisit the logic to prevent this from happening.
0
wedfrgt
级别 8 ,China
23 二月 2021, 09:06
After listening to your point of view, I found my mistake, thank you very much!
0
了解
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • 游戏项目
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 活动
  • Affiliate Program
公司
  • 关于我们
  • 联系方式
  • 评论
  • 新闻发布室
  • CodeGym 教育
  • 常见问题
  • 支持
CodeGym CodeGym 是一个从零开始学习 Java 语言编程的在线课程。本课程是初学者掌握 Java 语言的绝佳方式。它包含 1200 多个可即时验证的任务,以及基本范围内的 Java 基础理论。为了帮助你在教育上取得成功,我们实现了一组激励功能:小测验、编码项目以及有关高效学习和 Java 语言开发人员职业方面的内容。
关注我们
界面语言
程序员不是天生的 © 2023 CodeGym
MastercardVisa
程序员不是天生的 © 2023 CodeGym
This website uses cookies to provide you with personalized service. By using this website, you agree to our use of cookies. If you require more details, please read our Terms and Policy.