java空心菱形算法 10
请问这个算法的逻辑是什么?特别不明白i<size/2+1,j=size/2+1;j>i+1;j--,j=0;j<2*i+1;j++这些逻辑,请大神指导,非常感谢!publ...
请问这个算法的逻辑是什么?特别不明白 i < size / 2 + 1, j = size / 2 + 1; j > i + 1; j--, j = 0; j < 2 * i + 1; j++这些逻辑,请大神指导,非常感谢!
public static void printHollowRhombus(int size) {
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 static void printHollowRhombus(int size) {
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("");
}
}
} 展开
1个回答
展开全部
这样的代码光是看是很难看明白的,自己举个例子简单地在纸上写一写画一画,就比较容易明白了。
假定size=5,可以想像一下菱形的形状,size/2+1=3,按以上代码的逻辑来看,就是先处理上面的3行,然后处理下面剩下的2行。
处理上面3行的时候,每一行需要根据行数分别输出*和空格。先看第1行,i==0.
for (int i = 0; i < size / 2 + 1; i++) {
for (int j = size / 2 + 1; j > i + 1; j--) {
System.out.print(" ");// 输出左上角位置空白
}
这段代码此时的i==1,内层循环走完以后,会输出2次空格(j==3,j==2时),
然后依次往下走。
不得不说,上面的代码写的太复杂了,这么多for循环,看着好费劲的说~~
假定size=5,可以想像一下菱形的形状,size/2+1=3,按以上代码的逻辑来看,就是先处理上面的3行,然后处理下面剩下的2行。
处理上面3行的时候,每一行需要根据行数分别输出*和空格。先看第1行,i==0.
for (int i = 0; i < size / 2 + 1; i++) {
for (int j = size / 2 + 1; j > i + 1; j--) {
System.out.print(" ");// 输出左上角位置空白
}
这段代码此时的i==1,内层循环走完以后,会输出2次空格(j==3,j==2时),
然后依次往下走。
不得不说,上面的代码写的太复杂了,这么多for循环,看着好费劲的说~~
追问
请问,菱形的对角线不相等,size是对角线长吗?i j的关系如何得来的?大神帮帮忙
追答
size表示菱形的大小的,
*
***
*****
***
*
像上面的这个,当然,它不是空心的,这样看起来方便,里面换成空格看起来不明显。
size=5,表示有5行,最中间有5个字符。
第1行,i==0,需要输出2个空格,
第2行,i==1,需要输出1个空格
第3行,i==2,需要输出0个空格。
可以看出来,空格个数随着i的增加是每次递减1的。所以 j--(每次减1),
i==0时,j==2,j==1可输出2次空格,j==3,j==2也可(这种情况就是你发的代码里的 int j=size/2+1,j>i+1,j--),也可以写成(int j=size/2,j>=i+1;j--),只要能输出2次空格即可。
size/2其实是除了菱形中间那一行之外,上面一半的行数,也是第1行需要输出的空格数。
5/2=2,4/2=2,这样的能明白吧,只取结果的整数。
其实就需要一个实际的例子来计算i,j之间的关系。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询