Java打印星号菱形程序无法进入基础FOR循环,无输出无报错如何排查
问题根因
你的for循环判断条件写反了,所以从一开始就不满足执行条件,直接跳过了整个循环体。
你写的外层循环规则是:
for (int i = 0; i >= n; i++) { // 循环体 }
规则是每次执行循环体前,先判断中间的条件i >= n是否成立,只有成立才会执行循环内的代码。你输入的n是正奇数(比如3、5、7),i初始值为0,0 >= 3这类判断从最开始就不成立,所以循环一次都不会跑,自然没有任何输出,也不会触发异常。
你代码里其余几个for循环也存在相同的条件写反问题:
- 输出空格的循环:
for (int j = (n / 2); j <= 0; j--),n为正奇数时n/2最小是1,1 <= 0永远不成立 - 输出星号的循环:
for (int k = 0; k >= i; k++),i大于0时0 >= i不成立,循环无法执行
修正参考代码
package diamante; import java.util.Scanner; public class Diamente { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter an odd number for the size of the diamond"); int n = sc.nextInt(); // 校验输入合法性 if (n % 2 == 0) { System.out.println("请输入奇数"); sc.close(); return; } int mid = n / 2; // 打印上半部分(含中心线) for (int i = 0; i <= mid; i++) { // 打印左侧空格 for (int j = 0; j < mid - i; j++) { System.out.print(" "); } // 打印星号 for (int k = 0; k < 2 * i + 1; k++) { System.out.print("*"); } System.out.println(); } // 打印下半部分 for (int i = mid - 1; i >= 0; i--) { // 打印左侧空格 for (int j = 0; j < mid - i; j++) { System.out.print(" "); } // 打印星号 for (int k = 0; k < 2 * i + 1; k++) { System.out.print("*"); } System.out.println(); } sc.close(); } }
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

