Java打印对称数字图案逻辑错误:无法生成正确递减序列求助
数字图案生成问题的错误分析与修正方案
需求图案(n=5时)
****1 ***232 **34543 *4567654 567898765
错误输出图案(n=5时)
****1 ***232 **34544 *4567666 567898888
代码错误分析
问题出在第三个循环(数字递减部分):
你在循环体内每次都执行ans1= 2*row-2;,这会导致每一轮循环都把ans1重置为同一个值,所以每次打印的都是相同数字,最终出现重复。比如当row=3时,循环两次,每次都把ans1设为4,打印两次4,而不是递减的4、3。
修正方案
将ans1= 2*row-2;移到第三个循环的外面,只初始化一次,然后在循环内仅执行打印和递减操作。这样ans1会在每次循环后正常递减,生成正确的序列。
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { solve(); } public static void solve(){ int n; Scanner obj = new Scanner(System.in); n = obj.nextInt(); for(int row = 1; row <= n; row++){ int ans1 = row; // 打印星号空格 for(int spaces = 1; spaces <= n - row; spaces++){ System.out.print("*"); } // 打印递增数字部分 for(int pattern01 = 1; pattern01 <= row; pattern01++){ System.out.print(ans1); ans1++; } // 打印递减数字部分:修正初始化位置 ans1 = 2 * row - 2; for(int pattern2 = 1; pattern2 <= row - 1; pattern2++){ System.out.print(ans1); ans1--; } System.out.println(); } } }
内容的提问来源于stack exchange,提问作者animesh chaudhri
相关产品推荐
相关产品推荐

