抱歉,请老师我有点迷糊,请老师讲解下这个程序,感谢
在习题5—3中,让用for循环做个这种星号梯形,我用for完成后,想用while试试,结果弄了将近半小时也没弄出来,就请老师写了一个,我自己来研究,然后发现一个数据初始化的问题。如图程序是老师写的,输出是符合题目要求的。我发现老师在while循环结构外int了一个a一个c,但是把b放在外层循环里边进行初始化。我就想能不能把b拿出来,放在循环结构外面。可是拿出来后我发现程序输出成了这样为什么空格只在第一行输出啊?我自己读代码的时候有点混乱,找不到哪里出错了。烦请老师讲解下,感谢!
正在回答 回答被采纳积分+1
同学你好,1. 如果在while (a <= 5)外定义变量b,则在while (b> 0)循环中会将变量b修改为0。并且没有在重新执行while (b> 0) 循环前,计算出空格数量(b没有重新赋值,值依然为0),所以导致出现同学出现的问题。
2. 在while (a <= 5) 循环内定义变量b,在while (b> 0)循环中将变量b修改为0时,则在重新执行while (b> 0) 循环时,会重新为b变量赋值(计算出空格数量),从而实现梯形。
3. 具体内容添加了注释,同学可以查看。如下所示:
//外层控制行,内层两个,第一个控制空格第二个控制星号 public static void main(String[] args) { int a = 1, c = 1; // 行数为5,则当a小于等于5时,则进入循环 while (a <= 5) { // 空格数量,5-行数 int b = 5 - a; // 当b大于0时,则进入循环 while (b> 0) { System.out.print(" "); // 当 b-1小于等于0时,则退出循环,执行while (c <= (2 * a + 1))循环 b--; } // 设置初始值 c = 1; // 当c小于等于 (2 * 行数 + 1)时,进入循环 while (c <= (2 * a + 1)) { System.out.print("*"); // 当c+1大于 (2 * 行数 + 1)时结束循环,执行a++ c++; } System.out.println(); // 当a+1大于5时,则结束循环,否则执行继续执行循环(执行int b = 5 - a;等一下内容) a++; } }
如果我的回答解决了你的疑惑,请采纳,祝学习愉快!
public static void main(String[] args) {
int a = 1, c = 1;
int b=5-a;
while (a <= 5) {//外层控制行,内层两个,第一个控制空格第二个控制星号
//int b = 5 - a;
while (b> 0) {
System.out.print(" ");
b--;
}
c = 1;
while (c <= (2 * a + 1)) {
System.out.print("*");
c++;
}
System.out.println();
a++;
}
}
}
代码,//注释了两个int,循环里面是老师写的,外面是我改的
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星