黑马程序员技术交流社区

标题: 技术贴 [打印本页]

作者: 留心蝴蝶贱    时间: 2019-8-21 08:19
标题: 技术贴
利用java程序语言实现控制台打印出*组成的菱形//由题目可以知道我们需要创建一个Java类用来实现我们需要实现的内容public class Java {    //创建类之后,需要一个入口来进入程序,Java基础中常用main方法做程序的入口    public static void main(String[] args) {/*根据需求,我们可以得到的信息:1,整个序列存在换行,需要用循环来实现                             2,*号前面的空白需要在控制台没有显示的内容来填充,我的是用空格字符串来实现,                                 因为每一行的空白内容长短不一,而且存在一定的规律,所以可以用循环实现。                            3,同理,*号存在的行里也可以用循环来实现,具体的规律在具体步骤中阐述。        首先我来写第一个循环,,说到循环,我们首先要知道什么是循环?关于循环的定义:循环语句可以在满足循环        条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,        需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。当        我们知道什么是循环以后我们再次来分析题目,从题目中可以知道不管*还是空格都是需要在行列中存在,所        以第一个循环是包含它们所在的循环的。关于行列的循环,我们用for循环来实现。        而for循环格式:        for (初始化语句;条件判断语句;条件控制语句) {                                        循环体语句;                                        }             关于for循环的格式解释:         * 初始化语句:  用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样         * 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去         * 循环体语句:  用于表示循环反复执行的内容,简单说就是循环反复执行的事情         * 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去         * 执行流程:            ①执行初始化语句            ②执行条件判断语句,看其结果是true还是false  ?             如果是false,循环结束  ?             如果是true,继续执行            ③执行循环体语句            ④执行条件控制语句            ⑤回到②继续            for (int i = 0; i <; i++) {}要创建一个这样的循环,我们现有的信息是:int i=1;这是什么意思呢?            就是我们的循环是从第一行开始的,i表示的是行数,而判断条件我们怎么得到呢,我们可以假设这是一            个只有5行的*组成的菱形,如图:                               *                                             ***                                            *****                                             ***                                              *              我们先考虑菱形上半部分的变化*///             首先我们创建行数变化的循环        for (int i = 1; i <= 3; i++) {/*          创建了行数的循环之后,我们就要对这个循环进行填充,填充的内容包括*和空格,填充是从每一行的           初始位置开始的,而且是先填充空格,后填充*,空格和*所在的循环是同级的。           现在我们来创建关于空格填充的循环,如图,我们假设第3行里*前没有空白,那么空白从第一行到第三           行的变化是2,1,0,那么空格循环跟行数循环的关系是3-i;*号填充,从第一行到第三行的变化是1,3,5           那么*跟行数循环的关系是2乘(程序中用*表示)i-1*///          因为空格填充是再*的前面,所以我们先来创建空白循环            for (int j = 1; j <= 3 - i; j++) {//              我们通过输出字符串空格 来填充行里的内容;                System.out.print(" ");            }//          再创建*的循环            for (int j = 1; j <= (2 * i - 1); j++) {//                我们通过输出字符串* 来填充行里的内容;                System.out.print("*");            }//            我们用下面的代码来实现换行(print表示不换行,println表示换行)            System.out.println();        }//        从第四行开始的空格和*填充内容的变化跟上半部分是相反的//        先创建一个行数循环将上半部分的抛开,下半部分只有两行有内容,行数从上到下逐渐减少        for (int i = 2; i >= 1; i--) {//           在创建填充空格的循环(因为行数的变化跟上半部分相反,所以,空格和*的填充规律跟上半部分相同。)            for (int j = 1; j <= 3 - i; j++) {                System.out.print(" ");            }////            然后创建*填充的循环            for (int j = 1; j <= 2*i-1; j++) {                System.out.print("*");            }            System.out.println();        }    }}//        通过对比总行数跟代码表示的行数的关系我们可以得到一个如下的代码public class Java {    public static void main(String[] args) {//        定义一个的整数为菱形的总行数        System.out.println("请输入一个大于零的奇数");//因为要组成菱形所以行数是奇数        Scanner s = new Scanner(System.in);        int r = s.nextInt();//        再创建循环体对比上半循环体的行数跟总行数的数学关系改写        for (int i = 0; i <=(r+1)/2; i++) {            for (int j = 0; j < (r+1)/2 - i; j++) {                System.out.print(" ");            }            for (int j = 0; j < 2 * i - 1; j++) {                System.out.print("*");            }            System.out.println();        }//原理同上        for (int i = (r-1)/2; i > 0; i--) {            for (int j = 1; j <= (r+1) /2- i; j++) {                System.out.print(" ");            }            for (int j = 1; j < 2 * i; j++) {                System.out.print("*");            }            System.out.println();        }    }}虽然学习Java的过程很艰辛,但是每完成一个编程,心里都有种说不出的喜悦,可能这些对大神来说很简单,但是对我来说都是一次突破!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2