编程5-3
public class StarDemo {
public static void main(String[] args) {
// 输出星号组成的梯形
int m=1,n=4,a=11;
for(;m<6;m++){
for(int i=1;i<12;i++){
if(i<n){System.out.println(" ");}
if else(i<a-n){System.out.println("*");}
else{System.out.println(" ");}
}
}
System.out.println();
n--;
}
}
请问老师这个问题出在哪?
正在回答
用双重循环即可,两个内循环。课题有提示的。
public class StarDemo {
public static void main(String[] args) {
// 输出星号组成的梯形
for(int i=1;i<=5;i++){
for(int j=5;j>=i;j--){
System.out.print(" ");
}
for(int x=1;x<=(2*i+1);x++){
System.out.print("*");
}
System.out.println();
}
}
}
int i=0;
int j=0;
int k=0;
for(i=0; i<5; i++)//控制行数5
{
for (j=4-i; j>0; j--) //空格数量变化:4、3、2、1、0
System.out.print(" ");
for (k=3+i*2; k>0; k--) //星星变化数量为:3、5、7、9、11
System.out.print("*");
//容易使人困惑的是星星后边的空格这么处理,其实不用理会,没有东西输出就是空白;第一次也是傻傻的输出了空格
/*
for (j=4-i; j>0; j--)
System.out.println(" ");
*/
System.out.println();
}
//我们用for循环做换行的情况下,需要在for循环内定义行数
for(int m=1/*m从第一行开始*/;m<=5/*因为我们总共换行5次所以需要小于等于5*/;m++/*每换完一次行m的值需要加上一,以便在下一个循环中继续输入下面要嵌套的内容(空格和星号)*/){
//下面这个for的内容是输出空格所用的for循环语句
for(int i=7/*因为第一行需要输出的星号前面有多个空格所以给n的赋值要大一点保证输出的是梯形*/;i>m/*这个地方的需要让i小于m的原因是第一行我们需要输出的空格为6个,那么要满足梯形的结构第二行我们就需要5个,以此类推*/;i--/*i减小1的原因因为进入第二次循环的时候我们需要的空格比上一洗需要的空格少一个所以要自减一个满足第二行只出现5个空格*/){
System.out.print(" ");/*这个地方用的是print不换行,因为后面还要再继续跟星号*/
}
//下面在空格后面跟上星星
for(int a=1/*因为我们要在每一行写入*号,所以给a赋值1,后面做自增*/;a<=m*2+1/*这个限定条件是跟外循环关联的,因为在输出第一行内容的时候m的值是恒定不变的而每行以后m的值自增一次,我们用2和m相乘所得的值就是偶数,在加上1就是分别在每一行循环的时候是3,5,7,9,11*/;a++/*a需要输出的星星从第一行开始就是3个,所以需要自增运算*/){
System.out.print("*");/*这个地方用的是print不换行,因为后面还要在外循环有一个换行语句*/
}
System.out.println();/*外循环换行*/
}
你的里面,if else 改为else if,再把n--放到for循环中,不然只执行一次n--,且对循环没有任何作用。
public class StartDemo {
public static void main(String[] args) {
int m=1,n=4,a=11;
for(;m<6;m++){
for(int i=1;i<12;i++){
if(i<n){System.out.print(" ");}
else if(i<a-n){System.out.print("*");}
else{System.out.println(" ");}
}
n--;
}
System.out.println();
}
}
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星