【Java】使用两个双层For循环输出空心的菱形时参数的取值问题
【问】下面的实例代码中,两个双层For循环中的i、j的取值应该如何理解?【题】创建Diamond类,在该类的主方法中完成10行的空心菱形输出,实现方法是使用两个双层For...
【问】下面的实例代码中,两个双层For循环中的 i、j 的取值应该如何理解?
【题】创建Diamond类,在该类的主方法中完成10行的空心菱形输出,实现方法是使用两个双层For循环分别输出菱形的上半部分与下半部分,实例代码如下:
public class Diamond {
public static void main(String[] args) {
int size = 10;
if (size % 2 == 0) {
size++;// 计算菱形大小
}
for (int i = 0; i < size / 2 + 1; i++) {
for (int j = size / 2 + 1; j > i + 1; j--) {
System.out.print(" ");// 输出左上角位置的空白
}
for (int j = 0; j < 2 * i + 1; j++) {
if (j == 0 || j == 2 * i) {
System.out.print("*");// 输出菱形上半部边缘
} else {
System.out.print(" ");// 输出菱形上半部空心
}
}
System.out.println("");
}
for (int i = size / 2 + 1; i < size; i++) {
for (int j = 0; j < i - size / 2; j++) {
System.out.print(" ");// 输出菱形左下角空白
}
for (int j = 0; j < 2 * size - 1 - 2 * i; j++) {
if (j == 0 || j == 2 * (size - i - 1)) {
System.out.print("*");// 输出菱形下半部边缘
} else {
System.out.print(" ");// 输出菱形下半部空心
}
}
System.out.println("");
}
}
}
实例运行结果如图
所示。 展开
【题】创建Diamond类,在该类的主方法中完成10行的空心菱形输出,实现方法是使用两个双层For循环分别输出菱形的上半部分与下半部分,实例代码如下:
public class Diamond {
public static void main(String[] args) {
int size = 10;
if (size % 2 == 0) {
size++;// 计算菱形大小
}
for (int i = 0; i < size / 2 + 1; i++) {
for (int j = size / 2 + 1; j > i + 1; j--) {
System.out.print(" ");// 输出左上角位置的空白
}
for (int j = 0; j < 2 * i + 1; j++) {
if (j == 0 || j == 2 * i) {
System.out.print("*");// 输出菱形上半部边缘
} else {
System.out.print(" ");// 输出菱形上半部空心
}
}
System.out.println("");
}
for (int i = size / 2 + 1; i < size; i++) {
for (int j = 0; j < i - size / 2; j++) {
System.out.print(" ");// 输出菱形左下角空白
}
for (int j = 0; j < 2 * size - 1 - 2 * i; j++) {
if (j == 0 || j == 2 * (size - i - 1)) {
System.out.print("*");// 输出菱形下半部边缘
} else {
System.out.print(" ");// 输出菱形下半部空心
}
}
System.out.println("");
}
}
}
实例运行结果如图
所示。 展开
展开全部
public class Test2014111801 {
public static void main(String[] args) {
int size = 10;
if (size % 2 == 0) {//用size除以2余数等于0,说明size是个偶数,但菱形长度都是奇数的,所以需要加1
size++;
}
//整个循环都是从上到下,从左往右一个一个画的,只要符合条件就画一个对应的图标
for (int i = 0; i < size / 2 + 1; i++) { //先循环上半部分,这是行
for (int j = size / 2 + 1; j > i + 1; j--) {//循环列,画左上空白部分
System.out.print("1");// 每行从左往右画“1”的个数是(size/2+1)-(i+1),比如第一行是(10/2+1)-(0+1)=5,所以第一行画5个“1",以此类推
}
for (int j = 0; j < 2 * i + 1; j++) {//则开始画边缘“*”和空白,开始地方是上面那个for循环画完之后的位置,这里的j和上面没有关系,这是重新从0开始计算的
if (j == 0 || j == 2 * i) {//已知紧跟着的第一个就是“*”,所以j==0时画个“*”,
System.out.print("*");// 第二个“*”的位置离第一个“*”的位置与行数的关系2*行号,如第二行第二个“*”的位置离第一个“*”2*1=2位(行号从0算起)
} else {
System.out.print("2");// 其他不是“*”的位置用“2”填充
}
}
System.out.println("3");//最外面画个“3”,
}
//下半部分类似
for (int i = size / 2 + 1; i < size; i++) {
for (int j = 0; j < i - size / 2; j++) {
System.out.print(" ");// 输出菱形左下角空白
}
for (int j = 0; j < 2 * size - 1 - 2 * i; j++) {
if (j == 0 || j == 2 * (size - i - 1)) {
System.out.print("*");// 输出菱形下半部边缘
} else {
System.out.print(" ");// 输出菱形下半部空心
}
}
System.out.println("");
}
}
}
可以自己先理解理解,有问题可以追问
更多追问追答
追问
追答
j是那一行空格的最大个数,然后每一行递减,因为行是从0开始的所以行那就+1,所以计算公式就是(10/2+1)-(行号+1)=该画空格的个数
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询