for循环打印图形练习
解题思路:
1.以图像左上角为起点,建立坐标轴
2.找寻坐标(x,y)中x与y的关系,即行和列的关系
3.嵌套for循环打印,外层控制行数x,内层控制列数y
补充:分割图形,分别循环打印
1.编程打印出如图所示图形
1.找坐标规律:
x | y |
---|---|
1 | 7 |
2 | 7 |
3 | 7 |
4 | 7 |
5 | 7 |
即y与行数无关,永远y=7----->循环控制语句--------->y <= 7
2.双重for循环嵌套打样,外层控制行数(x),内层控制列数(y)
3.每打印完一行,需要换行
代码如下:
public class Test1{
public static void main(String args[]){
//双重for循环,第一重控制行数,第二重控制列数
for (int i = 1; i <= 5 ; i++) {
//y永远=7
for(int j = 1 ; j <= 7 ; j++){
System.out.print("*");
}
//打印完一列就换行
System.out.println(" ");
}
}
}
运行结果如下:
2.编程打印出如图所示图形
解题思路:
1.发现规律:
x | y |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
即 x=y------->循环控制语句--------->y <= x
2.双重for循环嵌套打样,外层控制行数(x),内层控制列数(y)
3.打印完一行,换行
代码如下:
public class Test2{
public static void main(String args[]){
for (int i = 1; i <= 5 ; i++) { //5行
for (int j = 1; j <= i ; j++) { //j<=i,j从第一个开始打印,最多等于i个
System.out.print('*');
}
System.out.println();
}
}
}
运行结果如下:
3.编程打印出如图所示图形
1.找坐标轴规律:
x | y |
---|---|
1 | 5 |
2 | 4 |
3 | 3 |
4 | 2 |
5 | 1 |
即,x+y=6------->循环控制语句-------->y <= 6-x
2.双重for循环嵌套打样,外层控制行数(x),内层控制列数(y)
3.打印完一行,换行
代码如下:
public class Test3{
public static void main(String args[]){
for (int i = 1; i <= 5 ; i++) {
for (int j = 1; j <= 6-i ; j++) {
System.out.print('*');
}
System.out.println();
}
}
}
运行结果如下:
迁移提升:分割图形,分别打印
4.编程打印出如图所示图形
1.分割图形,注意前面的空白也要当做在该坐标打印了空格,所以该图可分割为两个图形,直角三角形和等腰三角形
2.一个for循环控制行数,然后在里面嵌套两个并行的for循环,分别控制直角三角形和等腰三角形的列数
2.直角三角形:如题三分析得------>x=y------->循环控制语句--------->y <= 5-x(比题三少一行,所以为5-x)
3.等腰三角形:
x | y |
---|---|
1 | 1 |
2 | 2 |
3 | 5 |
4 | 7 |
5 | 9 |
即,y=2x-1--------------------->循环控制语句为--------------->y <= 2x-1
代码如下:
public class Test4 {
public static void main(String args[]) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5 - i; j++) {
System.out.print(' ');
}
for (int j = 1; j <= 2 * i - 1; j++) {
System.out.print('*');
}
System.out.println();
}
}
}
运行结果如图:
5.编程打印出如图所示图形
1.分割图形。如图所示,分为上下两办部分,上下又各自有一个直角三角形和一个等腰直角三角形。
2.上下部分分开打印。类比第5题,上下部分都是外层一个for循环控制行数,内层两个并列for循环分别控制直角三角形和等腰三角形列数
3.找规律。上半部分:
1的规律由题三可知为,x+y = 5------->y <= 5-x
2的规律由题四可知为,y = 2x-1-------->y <= 2x-1
下半部分:经过上半部分的思路,我们试着把下半部分y轴反一下,我们会发现上半部分的等腰三角形的规律依旧适用
3的规律:
x | y |
---|---|
3 | 1 |
2 | 2 |
1 | 3 |
即,x+y = 4----------------->循环控制语句---------------> y<=4-x
4的规律:
x | y |
---|---|
3 | 5 |
2 | 3 |
1 | 1 |
即,y = 2x-1----------->循环控制语句----------->y <= 2x -1
补:不反转y轴,4的规律,似乎没有规律,但在上半部分规律显而易见,这就是为什么要反转y轴的原因>
x | y |
---|---|
1 | 5 |
2 | 3 |
3 | 1 |
最后代码如下:
public class Test5{
public static void main(String args[]){
//上半部分的打印
for (int i = 1; i <=4 ; i++) {
//直角三角形
for (int j = 4-i; j > 0 ; j--) {
System.out.print(" ");
}
//等腰三角形
for (int j = 2*i-1; j > 0 ; j--) {
System.out.print('*');
}
System.out.println();
}
//下半部分的打印
for (int i = 3; i > 0 ; i-- ){
//直角三角形的打印
for (int j = 4-i; j > 0 ; j--) {
System.out.print(" ");
}
//等腰三角形的打印
for (int j = 2*i-1; j > 0 ; j--) {
System.out.print('*');
}
System.out.println();
}
}
}
运行结果如下图:
6.编程打印出如图所示图形
1.分割图形。如题5所示,分为上下两办部分,上下又各自有一个直角三角形和一个等腰直角三角形。(先不管空心的部分,等打印等腰三角形时在处理)
2.上下部分分开打印。类比第5题,上下部分都是外层一个for循环控制行数,内层两个并列for循环分别控制直角三角形和等腰三角形列数
3.找规律(与题5 相似)。上半部分:
1的规律由题三可知为,x+y = 5------->y <= 5-x
2的规律由题四可知为,y = 2x-1-------->y <= 2x-1
下半部分:
3的规律:
x | y |
---|---|
3 | 1 |
2 | 2 |
1 | 3 |
即,x+y = 4----------------->循环控制语句---------------> y<=4-x
4的规律:
x | y |
---|---|
3 | 5 |
2 | 3 |
1 | 1 |
即,y = 2x-1----------->循环控制语句----------->y <= 2x -1
4.处理空心部分,通过观察,我们发现,每一行第一个和最后一个打印*,否则打印空格,所以用if-else判断
最后代码如下:
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
//上半部分
for (int i = 1; i <= 4; i++) {
//直角三角形
for (int j = 1; j <= 4-i; j++) {
System.out.print(" ");
}
for (int j = 1; j <= 2*i-1 ; j++) {
//判断,如果是每行第一个,打印*,否则打印空格,实现空心等腰三角形
if(j == 1 || j==2*i-1)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println("");
}
//下半部分
for (int i = 3; i >=1 ; i--) {
//直角三角形
for (int j = 1; j <= 4-i ; j++) {
System.out.print(" ");
}
//判断,如果是每行第一个,打印*,否则打印空格,实现空心等腰三角形
for (int j = 1; j <= 2*i-1 ; j++) {
if(j == 1 || j==2*i-1)
System.out.print("*");
else
System.out.print(" ");
}
//一行结束,换行
System.out.println(" ");
}
}
}
运行结果如图:
思考:for循环打印的问题本质在于运用数学坐标系的方法就在于找规律,分割图形,嵌套输出