记录一次错误(打印一个菱形)

发布时间 2023-08-15 08:57:25作者: 小Y的开发笔记

记录一次错误(打印一个菱形)

正确代码

public class Exercise{
	public static void main(String[] args) {
		/*输出一个菱形*/
		/*
		  *     1   2
		 * *	3   1
		*   *	5   0
		 * *	3
		  * 	1
		 */
		
        //代表层数
		for (int i = 1; i <= 3 ; i++ ) {
            //输入*之前打印需要的空格
			for (int m = 1; m <= 3-i ; m++ ) {
				System.out.print(" ");
			}
            //抠出中间的*
			for (int j = 1; j <= (2*i)-1 ; j++) {
				if (j == 1 || j == (2*i)-1) {
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println(" ");
		}
        //代表层数
		for (int k = 2 ; k >= 1 ; k-- ) {
            //输入*之前打印需要的空格
			for (int o = 2; o >= k ; o-- ) {
				System.out.print(" ");
			}
            //抠出中间的*
			for (int n = 1; n <= (2*k)-1 ; n++) {
				if (n ==1 || n == (2*k)-1) {
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println(" ");
		}
	}
}

运行截图

image-20230815085110324

错误原因

image-20230815083956492

  1. 分析是空格输出的错误,一直在着力更改
  2. 但是后面发现,未写else语句,导致在打印*之后不打印中心的空格

image-20230815084214191

  1. 上层三角的*号在打印空格时出现错误,写成了这样的,但经过分析后,第一行2个空格,第二行1个,第三行0个,这样写代表第一行2个,第二行3个第三行4个

image-20230815084347256

运行效果:

image-20230815084552756

改正

//第一层三角在输入*前打印空格	
for (int m = 1; m <= i+1 ; m++ ) {
    System.out.print(" ");
}
//第一层三角抠出中间的*
for (int j = 1; j <= (2*i)-1 ; j++) {
				if (j == 1 || j == (2*i)-1) {
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
//第二曾倒三角在输入*前打印空格
for (int o = 2; o >= k ; o-- ) {
				System.out.print(" ");
}
//第二曾倒三角抠出中间的*
for (int n = 1; n <= (2*k)-1 ; n++) {
				if (n ==1 || n == (2*k)-1) {
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
}

总结

  1. 需要掌握for循环的原理
  2. 需要在开始编程之前把思路理顺
  3. 不能盲目的写代码,要掺杂自己的思考在里面
  4. 写出一条语句之前要先思考这个语句是干什么的,并且思考为什么这么写,是否有优化的地方