矩形
如果要实现for循环绘制图形的话,双重for循环自然必不可少。
在我的上篇博客:《你真的懂for循环吗?》中介绍双重for循环时,已经将双重for循环的特点:“外层循环控制行,内层循环控制列” 解释的很清楚,并且就是用的矩形做例子,这里就不多加赘述。当然合理把控内层循环变量j和外层循环变量i之间的关系以便控制内层循环的次数,也是关键!
等腰三角形
正所谓不会写注释的程序猿不是一个合格的程序猿,解释都在注释里
代码如下:
/**
* @author guqueyue
* @Date 2020/3/4
* 使用*号打印等腰三角形
* *
* ***
* *****
* *******
* *********
**/
public class For2 {
public static void main(String[] args) {
for(int i = 0; i < 5; i++) { // 5行,因此外层循环次数为5
/**
* i分别为: 0 1 2 3 4
* 空格数分别为:4 3 2 1 0
* i + j = 4 所以, j = 4 - i
*/
for(int j = 0; j < 4 - i; j++){
System.out.print(" ");
}
/**
* i分别为: 0 1 2 3 4
* 空格后*号数分别为:1 3 5 7 9
* j = 2 * i + 1
*/
for(int j = 0; j < 2 * i + 1; j++) {
System.out.print("*");
}
// 输出一行后换行
System.out.println();
}
}
}
Output:
直角三角形
如:
/**
* @author guqueyue
* @Date 2020/2/25
* 使用*号打印直角三角形
* 1 *
* 2 **
* 3 ***
* 4 ****
* 5 *****
**/
public class For1 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) { //外层for循环 i: 0 1 2 3 4
for (int j = 0; j < i + 1; j++) { //内层for循环 j: 1 2 3 4 5 j = i+1
System.out.print("*");
}
System.out.println();
}
}
}
Output:
九九乘法表
直接开撸代码:
/**
* @author guqueyue
* @Date 2020/3/4
* 绘制九九乘法口诀表
* 1*1=1
* 1*2=2 2*2=4
* ...
* 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
* 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
**/
public class For3 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
/**
* i: j:
* 1 1
* 2 1 2
* ... ...
* 8 1 2 3 4 5 6 7 8
* 9 1 2 3 4 5 6 7 8 9
* 所以, j <= i
*/
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + i*j + "\t");
}
// 输出一行后换行
System.out.println();
}
}
}
Output:
沙漏
此例和其他例子不同,在此例中,你需要根据条件判断临界情况并做两件事:
1.判断什么时候应该退出外层循环,彻底结束绘制。
2.判断什么时候到达临界点,开始反向绘制。
代码:
/**
* @author guqueyue
* @Date 2020/3/4
* 编写一个方法,根据参数n,打印对应的图形:
* n = 5时:
* * * * * *
* * * * *
* * * *
* * *
* *
* * *
* * * *
* * * * *
* * * * * *
**/
public class For4 {
public static void main(String[] args) {
// 设置变量n
int n = 5;
// 定义输出的字符串
String str = "* ";
// 设置变量number: 表示这一行str的数量
int number = n;
// 设置变量space: 表示这一行开始空格的数量
int space = 0;
// 设置标记变量,用于控制方向:其中true表示str数递减,false表示str数递增
boolean flag = true;
// 循环输出每行,当str数目开始大于n时,循环结束
for (;number <= n;) {
// 输出space个空格
for(int i = 0; i < space; i++) {
System.out.print(" ");
}
// 输出number个字符串
for(int i = 0; i < number; i++) {
System.out.print(str);
}
if(number == 1) { // 到达临界点,调换方向
flag = false;
}
if(flag){
// 下一行空格要递增,str要递减
space++; // 空格数分别为: 0 1 2 3 4
number--; // str数分别为:5 4 3 2 1
} else {
// 当只输出一个str后,下一行空格数要递减,str数要递增
space--; // 空格数分别为: 3 2 1 0
number++; // str数分别为: 2 3 4 5
}
// 输出一行后换行
System.out.println();
}
}
}
Output: