记录一次错误(打印一个菱形)
正确代码
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(" ");
}
}
}
运行截图
错误原因
- 分析是空格输出的错误,一直在着力更改
- 但是后面发现,未写else语句,导致在打印*之后不打印中心的空格
- 上层三角的*号在打印空格时出现错误,写成了这样的,但经过分析后,第一行2个空格,第二行1个,第三行0个,这样写代表第一行2个,第二行3个第三行4个
运行效果:
改正
//第一层三角在输入*前打印空格
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(" ");
}
}
总结
- 需要掌握for循环的原理
- 需要在开始编程之前把思路理顺
- 不能盲目的写代码,要掺杂自己的思考在里面
- 写出一条语句之前要先思考这个语句是干什么的,并且思考为什么这么写,是否有优化的地方