Java 菱形星号的高度
Height of Java Diamond Asterisk
如何让这段代码正确显示高度?因此,如果菱形星号的宽度为 3,高度为 5,则菱形将如下所示。
*
***
***
***
*
它只是在中间增加了多余的高度。到目前为止,这是我的代码。它可以很好地处理宽度。
public static void main(String[] args) {
int width, height, heightT;
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("Enter width of diamond (odd number between 0-19): ");
width = scan.nextInt();
if (width % 2 != 0) {
if (0 <= width && width <= 19) {
break;
}
}
}
while(true) {
System.out.println("Enter height of diamond (greater than or equal to width): ");
height = scan.nextInt();
if(height >= width) {
heightT = height - width;
break;
}
}
for(int i = 1; i < width + 1; i += 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
for(int i = width - 2; i > 0; i -= 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
}
解决此类逻辑时,您必须始终关注您知道的事情永远不会改变。在这种情况下,3 事情永远不会改变:
1.第一行。 始终等于一个星号。
2。中间线。 始终等于星号中的宽度。
3。最后一行。 始终等于一个星号。
现在,将钻石从中间一排一分为二。请注意 总高度将始终是顶部(或底部)的高度乘以 2 加 1(中间行)。你得到的东西比这样少:
for(int i = 0; ((i*2)+1) <= height; i++){
//Print top
}
// Print middle row outside of loops or inside if you must.
for(int i = 0; ((i*2)+1) <= height; i++){
//Print bottom.
}
编辑: 这仅适用于高度大于或等于宽度的钻石。
编辑: 此代码解决了您的问题(给定的高度大于或等于宽度)。但是,它 无法正确处理 width = 0
或 width = 1
。我相信这对您来说已经足够简单了。
public static void main(String[] args) {
int height = 9, width = 9;
int spaces = (width - 1) / 2, asterisks = 1;
for(int i = 0;((i*2)) < height; i++){
for(int ii = 0;ii < spaces;ii++){
System.out.print(" ");
}
for(int ii = 0;ii < asterisks;ii++){
System.out.print("*");
}
spaces--;
if(asterisks < width)asterisks += 2;
System.out.println();
}
spaces = 0;
for(int i = 0; ((i*2)+1) < height; i++){
if(width < height){
for(int ii = 0;ii < spaces;ii++){
System.out.print(" ");
}
for(int ii = 0;ii < asterisks;ii++){
System.out.print("*");
}
}else{
for(int ii = 0;ii < (spaces + 1);ii++){
System.out.print(" ");
}
for(int ii = 0;ii < (asterisks - 2);ii++){
System.out.print("*");
}
}
spaces++;
asterisks -= 2;
System.out.println();
}
}
您可以计算高度和宽度之间的差异,并在 while 循环中重用您的逻辑。
for(int i = 1; i < width + 1; i += 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
int dif = height-width;
while(dif !=0){
for(int i = width; i < width + 1; i += 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
dif--;
}
for(int i = width - 2; i > 0; i -= 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
如何让这段代码正确显示高度?因此,如果菱形星号的宽度为 3,高度为 5,则菱形将如下所示。
*
***
***
***
*
它只是在中间增加了多余的高度。到目前为止,这是我的代码。它可以很好地处理宽度。
public static void main(String[] args) {
int width, height, heightT;
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("Enter width of diamond (odd number between 0-19): ");
width = scan.nextInt();
if (width % 2 != 0) {
if (0 <= width && width <= 19) {
break;
}
}
}
while(true) {
System.out.println("Enter height of diamond (greater than or equal to width): ");
height = scan.nextInt();
if(height >= width) {
heightT = height - width;
break;
}
}
for(int i = 1; i < width + 1; i += 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
for(int i = width - 2; i > 0; i -= 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
}
解决此类逻辑时,您必须始终关注您知道的事情永远不会改变。在这种情况下,3 事情永远不会改变:
1.第一行。 始终等于一个星号。
2。中间线。 始终等于星号中的宽度。
3。最后一行。 始终等于一个星号。
现在,将钻石从中间一排一分为二。请注意 总高度将始终是顶部(或底部)的高度乘以 2 加 1(中间行)。你得到的东西比这样少:
for(int i = 0; ((i*2)+1) <= height; i++){
//Print top
}
// Print middle row outside of loops or inside if you must.
for(int i = 0; ((i*2)+1) <= height; i++){
//Print bottom.
}
编辑: 这仅适用于高度大于或等于宽度的钻石。
编辑: 此代码解决了您的问题(给定的高度大于或等于宽度)。但是,它 无法正确处理 width = 0
或 width = 1
。我相信这对您来说已经足够简单了。
public static void main(String[] args) {
int height = 9, width = 9;
int spaces = (width - 1) / 2, asterisks = 1;
for(int i = 0;((i*2)) < height; i++){
for(int ii = 0;ii < spaces;ii++){
System.out.print(" ");
}
for(int ii = 0;ii < asterisks;ii++){
System.out.print("*");
}
spaces--;
if(asterisks < width)asterisks += 2;
System.out.println();
}
spaces = 0;
for(int i = 0; ((i*2)+1) < height; i++){
if(width < height){
for(int ii = 0;ii < spaces;ii++){
System.out.print(" ");
}
for(int ii = 0;ii < asterisks;ii++){
System.out.print("*");
}
}else{
for(int ii = 0;ii < (spaces + 1);ii++){
System.out.print(" ");
}
for(int ii = 0;ii < (asterisks - 2);ii++){
System.out.print("*");
}
}
spaces++;
asterisks -= 2;
System.out.println();
}
}
您可以计算高度和宽度之间的差异,并在 while 循环中重用您的逻辑。
for(int i = 1; i < width + 1; i += 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
int dif = height-width;
while(dif !=0){
for(int i = width; i < width + 1; i += 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
dif--;
}
for(int i = width - 2; i > 0; i -= 2) {
for(int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for(int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}