java - 在这种情况下,多个 if 和 if-else 有什么区别?
问题描述
该程序应该在 1 处停止循环,但如果有多个 if,它会继续循环。我能够使用 if-else 完成练习,但我无法在此处跟踪和理解多个 if 和 if-else 之间的差异。
我是新来的,所以提前感谢大家的帮助。
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a starting value: ");
int input = keyboard.nextInt();
System.out.print(input + ",");
System.out.print(" ");
while (input != 1) {
if (input % 2 == 0) {
input = input / 2;
System.out.print(input + ",");
System.out.print(" ");
}
if (input % 2 == 1) { // replace with else
input = 3 * input + 1;
System.out.print(input + ",");
System.out.print(" ");
}
}
keyboard.close();
}
预期:程序应在 1 处停止(检查时)
实际:它继续无限循环:4 2 1 4 2 1 ....
解决方案
因为起始值为4
,所以第一个 if 语句将其缩减为2
。在循环的下一次迭代中,第一个 if 语句将其减少为1
,但随后第二个 if 语句发现它是一个奇数,并将其乘以3
并加上1
。
要解决此问题,您的第二个 if 语句需要替换为else
,因为只有两种可能的情况:
if (input % 2 == 0) {
input = input / 2;
} else {
input = 3 * input + 1;
}
System.out.print(input + ", ");
这样一来,如果执行了第一个 if 语句,则不会执行第二个 if 语句。
推荐阅读
- excel - 使 Excel 列表更清晰,以查看单元格之间的差异
- pine-script - 蜡烛与 ema 和距离分离
- ios - 快速将图像添加到表格视图
- ms-access - MS Access:如何将 Is Null 包含在 IIF 语句的结果中以获取查询条件(如果搜索字段留空,则添加“is Null”)
- java - 在 Maven 项目中的黄瓜测试(即 maven surefire 插件)之前运行 Java 代码以生成特征文件
- python - AttributeError:模块“torchtext.data”没有属性“字段”
- vhdl - 在 VHDL 中使用 SHIFTING 进行除法和乘法
- flutter - 例外,试图在应用程序上运行图片
- angular - Angular 路由器通配符 URL 不适用于空路径
- python - 如何编写 Pydantic 模型以接受字典词典