抱歉,请老师我有点迷糊,请老师讲解下这个程序,感谢

抱歉,请老师我有点迷糊,请老师讲解下这个程序,感谢

http://img1.sycdn.imooc.com//climg/5f72fed50924657915850919.jpg在习题5—3中,让用for循环做个这种星号梯形,我用for完成后,想用while试试,结果弄了将近半小时也没弄出来,就请老师写了一个,我自己来研究,然后发现一个数据初始化的问题。如图程序是老师写的,输出是符合题目要求的。我发现老师在while循环结构外int了一个a一个c,但是把b放在外层循环里边进行初始化。我就想能不能把b拿出来,放在循环结构外面。可是拿出来后我发现程序输出成了这样http://img1.sycdn.imooc.com//climg/5f72ffe60944f12916130945.jpg为什么空格只在第一行输出啊?我自己读代码的时候有点混乱,找不到哪里出错了。烦请老师讲解下,感谢!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小尤 2020-09-29 18:22:28

同学你好,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++;
		}
	}

如果我的回答解决了你的疑惑,请采纳,祝学习愉快!

  • 提问者 昜某人 #1
    感谢老师,我自己在想的时候有点犯迷糊,就是在b赋值这里有点混乱,感谢
    2020-09-29 20:46:17
昜某人 提问者 2020-09-29 17:38:05

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,循环里面是老师写的,外面是我改的

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师