java演练 循环嵌套 菱形图案的打印
阶段一,数据分析
阶段二,实现一个画线的方法
思路
定义一个类
类中提供一个画线的方法
我们实例这个类为一个对象
通过调用这个对象的画线方法,实现绘制一行内容
画线方法具体功能实现
1,实现画一条线,固定符号与个数
2,让符号个数变为一个变量
3,让输出的符号也变成一个变量。只要修改这个符号变量,可以控制输出的符号
小结当前的情况
让方法变成带参方法
好处
可以通过外部的实参来控制输出的内容
1,外部传一个参数,控制符号的数量
注,外部传入一个实参,必需要有一个形参接收
2,外部传入第二个参数,控制符号的内容
小结
方法设计完毕
我们得到了一个功能
只需要传入一个数字,一个符号,就可以控制打印出一行内容来
将来在需要的时候直接使用即可
阶段二,代码
类的定义与方法的编写
public class Helper {
/**
* 画线的方法
*/
public void writeLine(int n,String con_char) {
for (int i = 0; i < n; i++) {
System.out.print(con_char);
}
}
}
类的实例化与方法的调用测试
import java.util.Scanner;
public class test {
public static void main(String[] args) {
// 实例化帮手对象
Helper hp = new Helper();
// 调用画线方法,
hp.writeLine(4, "%");
}
}
阶段三,数据生产
生成了所有数据后打印试一试
与我们列出来的数据是否一致
对于五行菱形而言的预期数据:
最中间的行,行号是3
索引:0 行号:1 空格:2 符号:1 总行:5 转折行:3
索引:1 行号:2 空格:1 符号:3 总行:5 转折行:3
索引:2 行号:3 空格:0 符号:5 总行:5 转折行:3
索引:3 行号:4 空格:1 符号:3 总行:5 转折行:3
索引:4 行号:5 空格:2 符号:1 总行:5 转折行:3
数据完毕后,可以输出行了
阶段三,主要代码
import java.util.Scanner;
public class test {
public static void main(String[] args) {
// 实例化帮手对象
Helper hp = new Helper();
// 总行号
int total_num = 5;
// 转折行号
int mid_num = (total_num + 1) / 2;
System.out.println("最中间的行,行号是" + mid_num);
int char_num = 0; // 符号数量
int space_num = 0; // 空格数量
// 数据生产
for (int idx_num = 0; idx_num < total_num; idx_num++) {
// 行号数据 = 索引号+1
int line_num = idx_num + 1;
// 符号数据,生成需要根据公式
if (line_num <= mid_num) {
char_num = 1 + 2 * idx_num;
space_num = mid_num - line_num;
} else {
char_num = char_num - 2;
space_num = line_num - mid_num;
}
System.out.println("索引:" + idx_num + "\t行号:" + line_num + "\t空格:" + space_num + "\t符号:" + char_num + "\t总行:" + total_num + "\t转折行:" + mid_num);
}
}
}
阶段四,有了数据就输出符号吧
图案的输出分析
每一行我们需要输出的内容:
空格 + 符号即可
如何输出每一行?
这个循环,控制的就是行的输出
有几行,就会循环几次
所以我们只需要在每一次循环里,完成内容的输出就可以了
先测试一下,输出一串666
我们只需要控制666的输出这里的内容就行
可以通过调用方法来输出不同的内容
输出符号
根据我们算出来的char_num,控制一行输出的内容
输出空格
空格位于符号的前面
先输出空格,再输出符号
小结
每一行要输出的内容由
空格 + 符号组成
例如
阶段四,代码
import java.util.Scanner;
public class test {
public static void main(String[] args) {
// 实例化帮手对象
Helper hp = new Helper();
// 总行号
int total_num = 3;
// 转折行号
int mid_num = (total_num + 1) / 2;
System.out.println("最中间的行,行号是" + mid_num);
int char_num = 0; // 符号数量
int space_num = 0; // 空格数量
// 数据生产
for (int idx_num = 0; idx_num < total_num; idx_num++) {
// 行号数据 = 索引号+1
int line_num = idx_num + 1;
// 符号数据,生成需要根据公式
if (line_num <= mid_num) {
char_num = 1 + 2 * idx_num;
space_num = mid_num - line_num;
} else {
char_num = char_num - 2;
space_num = line_num - mid_num;
}
System.out.println();
// 空格的输出
hp.writeLine(space_num, " ");
// 符号的输出
hp.writeLine(char_num, "*"); // 效果,输出一行内容,由2个*组成
}
}
}
最终小结
面对一个这样的题
先分析数据
生产数据
然后再利用数据进行输出
为了便于理解
我们写了一个方法
从而壁免了双重循环的操作
然而实际,还是用的双重循环
只不过
通过调用writeLine方法
我们把里层画线的方法封装起来,看不见了而已
小结再小结:
- 写小功能
- 生产数据
- 利用数据与小功能结合,输出图形