Java嵌套for循环仅a=1时有输出,其他a值无输出是什么原因?
问题根因
- 内层循环的变量初始化逻辑错误:你在内层循环中复用了外层定义的全局变量
b,第一次a=1执行内层循环时,b会从输入值一直累加到16才退出内层循环。后续a自增到2到10时,内层循环的判断条件b<16永远不成立,因此不会输出任何a>1的结果。 - 额外问题:你没有为嵌套循环添加花括号,代码可读性极差,极容易出现逻辑判断错误;另外你提供的实际输出缺失
15 * 1 = 15行,属于输出笔误,b<16的终止条件本身是会覆盖b=15的情况的。
修复方案
根据你的需求可选择两种修复方式:
固定内层循环从1开始(匹配你给出的预期输出)
如果你不需要使用输入值作为乘法表的起始乘数,直接将内层循环的变量改为局部变量,每次循环都从1初始化即可:
package com.company; import java.util.Scanner; public class ForDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(); System.out.print("ENTER A NUMBER: "); // 不需要该输入可直接删除相关代码 int input = sc.nextInt(); for(int a=1 ;a<11;a++) { for(int b=1;b<=15;b++) { System.out.println(b + " * " + a + " = " + b*a); } } } }
保留输入作为内层循环起始值
如果你需要使用输入的数值作为乘法表的起始乘数,就将输入值单独存储为起始变量,每次执行内层循环时都用该起始值重置循环变量:
package com.company; import java.util.Scanner; public class ForDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(); System.out.print("ENTER A NUMBER: "); int startB = sc.nextInt(); for(int a=1 ;a<11;a++) { for(int b=startB;b<=15;b++) { System.out.println(b + " * " + a + " = " + b*a); } } } }
内容的提问来源于stack exchange,提问作者Shashwat Kumar
相关产品推荐
相关产品推荐

