1.问题重述
题目:打印出菱形(固定输出和根据键盘读入的信息输出)
2.解析
先把图形分成两部分来看待,前四行一个规律,后三行一个规律;
设i表示行,j表示列
先写一个say方法,输入行数时,可以返回该行有多少列
则前四行的规律为:当i+j的和小于5时,则输出一个空格,其余位置均为*
后三行的规律:当(i-4)<=j时,则输出一个空格,其余位置为*
3.解决问题
代码如下:
灵活打印
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
int row = 0; // 菱形的行数
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.print("请输入菱形行数:");
row = input.nextInt();
while (row % 2 == 0) {
System.out.print("请输入奇数:");
row = input.nextInt();
}
int n = (row + 1) / 2;
// 打印菱形的上半部分
for (int i = 1; i <= n; i++) {//i控制行数
for (int j = 1; j <= n - i; j++) {//j控制该行空格数
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {//k控制该行*的数量
System.out.print("*");
}
System.out.println();
}
// 打印菱形的下半部分
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= n - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
}
固定菱形大小打印:
public class demo {
public static void main(String[] args) {
for(int i = 1;i < 5;i++) {
for(int j = 1;j <= say(i);j++) {
if((i + j) < 5) {
System.out.print(" ");
}else {
System.out.print("*");
}
}
System.out.println();
}
for(int i = 1;i < 4;i++) {
for(int j = 1;j <= say(i+4);j++) {
if(i >= j)
System.out.print(" ");
else
System.out.print("*");
}
System.out.println();
}
}
public static int say(int a) {
switch(a) {
case 1:
case 7:
return 4;
case 2:
case 6:
return 5;
case 3:
case 5:
return 6;
case 4:
return 7;
default:
return 0;
}
}
}