简体   繁体   English

用Java打印钻石形状

[英]Print Diamond Shape With Java

I want to print a grid shape on the output console in Eclipse. 我想在Eclipse的输出控制台上打印网格形状。

示例钻石形状

Basically I took an integer from user that is the number of stars in a single border of the grid. 基本上,我从用户那里得到一个整数,它是网格单个边框中的星星数。

Here the code I have up to now: 这里是我到目前为止的代码:

import java.util.Scanner;

public class PrintDiamond {
    public static void main(String[] args) {
        System.out.print("Enter the number: ");
    Scanner scan = new Scanner(System.in);
            int num = scan.nextInt();
            num--;
                for (int i=num; i>0; --i){

                //Insert spaces in order to center the diamond
                for (int n=0; n<i; ++n){
                    System.out.print("  ");
                }
                    System.out.print(" *");
                for (int n=i; n<num; ++n){
                    System.out.print(" + ");
                    System.out.print(" ");
                }//Ending bracket of nested for-loop

                    System.out.println();
            }//Ending bracket of for loop

            //Print out a diamond shape based on user input
                for (int i=0; i<=num; ++i){   //<= to print the last asterisk

                //Insert spaces in order to center the diamond
                for (int n=0; n<i; ++n){
                    System.out.print("  ");
                }
                System.out.print(" *");
                for (int n=i; n<num; ++n){
                    System.out.print(" + ");
                    System.out.print(" ");
                }   //Ending bracket of nested for-loop

                    System.out.println();
            }       //Ending bracket of for loop            

    }

}

and the output is(for int. 6): 输出为(对于int。6):

           *
         * +  
       * +   +  
     * +   +   +  
   * +   +   +   +  
 * +   +   +   +   +  
   * +   +   +   +  
     * +   +   +  
       * +   +  
         * +  
           *

Some hints for your solution: 您的解决方案的一些提示:

  • Create a method for printing a "diamond row" for a given row width and a given total width of the diamond. 创建一种用于以给定的行宽和给定的钻石总宽度打印“钻石行”的方法。
  • Create a tool method for printing a given number of spaces. 创建一种用于打印给定数量的空格的工具方法。
  • Your main method should have two simple loops: One for the upper, one for the lower half. 您的main方法应该有两个简单的循环:一个循环为上循环,一个循环为下半循环。
  • The magic is in the method of printing a single diamond row for the given two parameters w and n . 魔术在于为给定的两个参数wn打印单个菱形行的方法。

This is always a good approach - reduce your complex problem to a problem with lesser complexity - in this case, by creating methods and using these eg in loops. 这始终是一个好方法-在这种情况下,通过创建方法并在循环中使用这些方法,可以将复杂的问题简化为复杂程度较小的问题。

In your method for printing a single diamond row, you will need to check if you are in an "odd" or "even" row. 在打印单个菱形行的方法中,您将需要检查您是处于“奇数”还是“偶数”行。

Ok, this looks like a school asignment, so I won't write any code. 好的,这看起来像是学校的作业,所以我不会编写任何代码。

First you need to understand and write, in pseudo-code or just plain English, what you want to do: 首先,您需要用伪代码或简单的英语来理解和编写您想做的事情:

  • Instructions on how to draw the grid. 有关如何绘制网格的说明。
    • How many lines should I print? 我应该打印几行?
    • How long is each line? 每行多长时间?
    • How do I know if I have to print a + or not? 我怎么知道我是否必须打印一个+
  • General steps of your program. 程序的一般步骤。
    • Read size of the grid, N. 读取网格的大小,N。
    • If N < 1, ask again (or exit program). 如果N <1,则再次询问(或退出程序)。
    • If N = 1 or greater, print the grid. 如果N = 1或更大,请打印网格。
  • Detailed sub-steps of your program. 程序的详细子步骤。
    • Print the grid 打印网格
      • Loop for number of lines. 循环获取行数。
      • Create empty array/buffer/list/string with correct length for current line. 为当前行创建具有正确长度的空数组/缓冲区/列表/字符串。
      • ... ...

Because right now, it seems like you haven't figured out any of that. 因为现在,您似乎还没有想到。 And if that's the case, then your problem has nothing to do with Java but rather with basic programming knowledge, which you won't get if we just code the algorith for you. 如果是这种情况,那么您的问题与Java无关,而与基本的编程知识有关,如果我们只是为您编写算法,则您将不会获得这些知识。

Here is the code: 这是代码:

public static void main(String[] args) {
    System.out.print("Enter the number: ");
    Scanner scan = new Scanner(System.in);
    int num = scan.nextInt();
    final char[][] diamond = makeDiamond(num);
    for (int i = 0; i < diamond.length; i++) {
        for (int j = 0; j < diamond[i].length; j++) {
            System.out.print(diamond[i][j]);
        }
        System.out.println();
    }
}

public static char[][] makeDiamond(int n) {
    int width = 1 + 4 * (n - 1);
    int height = 1 + 2 * (n - 1);
    char[][] out = new char[height][width];
    int x0 = 2 * (n - 1);
    int y0 = n - 1;
    for (int i = 0; i < width; i += 2) {
        // Top borders
        int y1 = Math.abs(y0 - i / 2);
        out[y1][i] = '*';

        // Bottom borders
        int y2 = height - Math.abs(i / 2 - y0) - 1;
        out[y2][i] = '*';

        if ((x0 - i) % 4 == 0) {
            // Plus signs
            for (int j = y1 + 1; j < y2; j++) {
                out[j][i] = '+';
            }
        }
    }
    return out;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM