中国桥梁建设网站,网站注册平台怎么注册,win10建设网站,恢复正常百度对一个编程新手来说#xff0c;最先知道了解的莫过于代码执行的三种结构#xff0c;顺序结构、循环结构和选择结构。 其中个人认为相对难以理解的是循环结构#xff0c;而针对循环结构的练习题最多的就是循环画出一种简单图形#xff0c;比如三角形。 当初我在学习写三角形…对一个编程新手来说最先知道了解的莫过于代码执行的三种结构顺序结构、循环结构和选择结构。 其中个人认为相对难以理解的是循环结构而针对循环结构的练习题最多的就是循环画出一种简单图形比如三角形。 当初我在学习写三角形的时候纯粹是背下来的。那时候去网上找这种打印的资料都是直接给一个结果而对于新手而言最重要的分析过程却没有。 这导致很多新手在懵懵懂懂的时候就学过去了。 个人以为能够更早的理解并调试循环结构新手们会更喜欢调试复杂的代码。因此拙文就诞生了。 一、如何打印一个或多行 * 号。 对于新手而言掌握打印一个 * 号都是一件极为困难的事情。事实上打印一个 * 号和打印一个任何教程上都有的 HelloWorld 没有本质的区别。 public class PrintTest {public static void main(String[] args) {System.out.println(*);}
} 对于打印多个 * 号的。有两种方式一种是 再次写一遍打印代码二是使用循环条件去控制多次打印。 public class PrintTest {public static void main(String[] args) {System.out.println(*);System.out.println(*);System.out.println(*);}
} public class PrintTest {public static void main(String[] args) {for (int i 0; i 3; i) {System.out.println(*);}}
} 这两种打印方式的结果是一样的。在调试代码时会发现第一种是顺序结构执行即执行上一句代码后执行下一句代码第二种是循环结构执行当通过循环条件判断时会执行循环体里的代码然后再次进行循环条件的判断当循环条件不满足时循环结束。 二、如何打印单行多个 * 号。 public class PrintTest {public static void main(String[] args) {for (int i 0; i 3; i) {System.out.print(*);}}
} 这段代码与之前的那个多行 * 号的 代码只有一点区别。那就是 循环体中 System.out.print() 和 System.out.println()的区别。 为了说明这个的区别必须先理解面向对象语言的基本概念对象本身。首先 System是一个对象out是System对象的一个成员属性它也是一个对象print()和println()是out的两个方法这两个方法均接收一个String类型的对象作为参数也就是 *。这两个方法在打印时有些区别print()直接输出println()先输出然后再输出一个换行符也就是说尽管我们只写了 *但实际上输出的不只 *是因为多输出的那个换行符导致我们所看到的结果的不同。为了能够清晰的说明这一点我们可以手动给print()里的参数加上一个换行符也就是 *\n。 public class PrintTest {public static void main(String[] args) {for (int i 0; i 3; i) {System.out.print(*\n);}}
} 这段代码的打印与之前的打印就一样了。 三、如何打印多行每行都有多个 * 号。 简单的做法就是结合之前的代码。 public class PrintTest {public static void main(String[] args) {for (int i 0; i 3; i) {System.out.print(*);}System.out.println();for (int i 0; i 3; i) {System.out.print(*);}System.out.println();for (int i 0; i 3; i) {System.out.print(*);}System.out.println();}
} 以上的代码为了打印多行首先必须打印单行为了打印多个首先必须循环打印在循环结束后打印一个换行。按照之前的循环逻辑可以将重复代码转化成循环结构。 public class PrintTest {public static void main(String[] args) {for (int i 0; i 3; i) {for (int i 0; i 3; i) {System.out.print(*);}System.out.println();}}
} 当我们使用如上的代码时会发现编译报错。 Error:(6, 22) java: 已在方法 main(java.lang.String[])中定义了变量 i 这句话的意思是重复定义了相同名称的变量i。这就意味着如果我们想转化成循环结构必须让这两个变量名不同于是引入j。 public class PrintTest {public static void main(String[] args) {for (int i 0; i 3; i) {for (int j 0; j 3; j) {System.out.print(*);}System.out.println();}}
} 这样我们便可打印出我们想要的结果。 四、如何打印多行、每行的 * 号数量等于行号。 这时我们就需要思考如何让每行的 * 号数量等于行号。我们可以先简单的列一下。行1* 1行2, * 2行3, *3。那么我们是如何控制每一行的输出内容呢实际上我们是靠变量j的判断条件如果j的判断条件变的与行号有关那么就可以做到了。而行号是由变量i控制的因此我们便有了。 public class PrintTest {public static void main(String[] args) {for (int i 0; i 3; i) {for (int j 0; j i; j) {System.out.print(*);}System.out.println();}}
} 五、 如何打印多行、每行的 * 号数量等于行号但每行开始打印的时机不同。 之前的代码打印出来的结果是每行开始的时候就开始打印那么如何让它不在开始的时候打印而是让它往右偏移一下呢。 我们可以引入一个偏移量这个变量offset。若在打印 * 号之前判断这个偏移量如果到达需要打印的时机那就打印那如何没有到达呢 实际上没有到达时并非是没有字符只是这个字符是一个空白符 。这样才能出现这种偏移的效果。 可是这个偏移量是如何定义的呢我们还是只能先列一下。 行 1 星 1偏移 2 行2 星 2 偏移 1 行3 星 3偏移0。看出来了没就是说偏移量和行号正好是反过来的。而且 行号 偏移量 恒等于 3。因此为了定义这个偏移量必须还要引入一个概念即我们希望我们打印的 * 号到底有多少行。我们可以引入总行数这个变量line给它定义为3偏移量为 line - 行号i 1。我们可以一同引入我们希望打印的 * 每行到底最多有多少个 columns给它定义为3。 注尽管一直以来是以行数来做说明但其实这个偏移量是由columns来控制行数与星数相同。 public class PrintTest {public static void main(String[] args) {int line 3;int columns 3;for (int i 0; i line; i) {int offset line - (i 1);for (int j 0; j columns; j) {if (j offset) {System.out.print( );} else {System.out.print(*);}}System.out.println();}}
} 六、如何打印一个标准的正三角形。 上一段代码打印的虽然有偏移但并非是我们所希望得到的一个标准的正三角形。那么就必须来分析我们目前所达到的效果和我们所预期的有什么样的差异。这些差异又如何通过调整代码来弥补。 为了更加明显的展示差异我将最大行数和最大列数均定义为9。 ************************************
********* 至少我们能看出来的是我们只偏移了左边而实际上三角形也需要偏移右边。那么我们可以将偏移量分为左偏移和右偏移两个变量。我们同样需要列一下现在的行关系。行1左偏移 4 右偏移 4 星 1行2 左偏移3 右偏移4, 星2行3左偏移3右偏移3星3... 那么有 loffset 和 roffset 为 列数columns - 星数line / 2 。当小于左偏移量和大于等于列数 - 右偏移量时打印 空字符。 public class PrintTest {public static void main(String[] args) {int line 9;int columns 9;for (int i 0; i line; i) {int loffset ( columns - (i 1 ) ) / 2;int roffset loffset;for (int j 0; j columns; j) {if (j loffset) {System.out.print( );} else if (j (columns - roffset)) {System.out.print( );} else {System.out.print(*);}}System.out.println();}}
} 效果为 * *** *** ***** ***** ******* *******
*********
********* 上述代码并没有产生我们所想要的效果。其原因在于计算偏移量时无法保证左偏移量和右偏移量始终为整数因列数columns - 星数line 存在 奇数尽管代码在执行过程中计算为整数但这会导致计算不精确。 简单的做法就是不打印那些存在奇数的行也就是说在循环时若发现列数columns - 星数line 为奇数则不打印该行。 判断奇数的方法为 求余如果余数为0则为偶数执行循环如果余数为1则跳过。 public class PrintTest {public static void main(String[] args) {int line 9;int columns 9;for (int i 0; i line; i) {int loffset;int roffset;int odd (columns - (i 1 )) % 2;if (odd 0) {loffset ( columns - (i 1 ) ) / 2;roffset loffset;for (int j 0; j columns; j) {if (j loffset) {System.out.print( );} else if (j (columns - roffset)) {System.out.print( );} else {System.out.print(*);}}System.out.println();} else {continue;}}}
} 打印效果如下 * *** ***** *******
********* 转载于:https://www.cnblogs.com/zixiaoguan/p/7457216.html