有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有2d数组的Java练习显示表

我正在努力完成一个java练习,它涉及使用2d数组根据命令行参数动态创建和显示一个表

例如:

java表5

+-+-+-+-+-+
|1|2|3|4|5|
+-+-+-+-+-+
|2|3|4|5|1|
+-+-+-+-+-+
|3|4|5|1|2|
+-+-+-+-+-+
|4|5|1|2|3|
+-+-+-+-+-+
|5|1|2|3|4|
+-+-+-+-+-+

到目前为止我所做的:

public static void main(String[] args) {

    int num = Integer.parseInt(args[0]);

    String[][] table = new String[num*2+1][num];

    int[] numbers = new int[num];
    int temp = 0;

    for(int i=0; i<numbers.length; i++)
        numbers[i] = i+1;

        // wrong
    for(int i=0; i<table.length; i++){
        for(int j=0; j<num;j++){
            if(i%2!=0){
            temp=numbers[0];
            for(int k=1; k<numbers.length; k++){
                numbers[k-1]=numbers[k];
            }
            numbers[numbers.length-1]=temp;
            for(int l=0; l<numbers.length; l++){
            table[i][j] = "|"+numbers[l];
            }
            }
            else
                table[i][j] = "+-";
    }
    }

    for(int i=0; i<table.length; i++){
        for(int j=0; j<num; j++)
        System.out.print(table[i][j]);
        if(i%2==0)
            System.out.print("+");
        else
            System.out.print("|");

        System.out.println();}
}

这不起作用,因为它每行打印1 | 2 | 3 | 4,这不是我需要的。我发现了这个问题,这是因为第一个for循环更改数组顺序的次数超过了需要的次数,并且基本上它返回的是最初的状态

我知道可能有一种方法可以通过编写更多的代码来实现这一点,但我总是倾向于在编写代码时尽可能多地嵌套以“优化”代码,这就是为什么我尝试通过使用尽可能少的变量和循环来解决这一问题


共 (4) 个答案

  1. # 1 楼答案

    您已经使它变得更复杂,请尝试以下简单代码:

    enter code here
     public static void main(String[] args)    
    {
      int n  =   5 ;
      for(int i = 1 ; i <= n  ;i++)
      {
          for(int l = 0  ; l < n;l++)
           System.out.print("+-");
    
          System.out.print("\n|");
          for(int j = i ; j <=n;j++ )
          {
              System.out.print(j+"|");
    
          }
         for(int k = 1 ; i >= 2 && k <=i-1;k++)
         {
             System.out.print(k+"|");
         }
          System.out.println();
      } 
    

    }

  2. # 2 楼答案

    你太复杂了。很难找到你的错误。直接代码如下:

    public static void main(String[] args) {
    
    
        //int num = Integer.parseInt(args[0]);
        int num = 5; // for test
    
        // creating 2d array
        int[][] figures = new int[num][num];
    
        // filling the array
        for(int row=0; row<figures.length; ++row) {
            for(int col=0; col<figures[row].length; ++col) {
                figures[row][col] = (row + col) % num + 1; 
            }
        }
    
        // printing the array
        for(int row=0; row<figures.length; ++row) {
    
            // printing border
            for(int col=0; col<figures[row].length; ++col) {
                System.out.print("+-");
            }
            System.out.println("+");
    
            // printing data row
            System.out.print("|");
            for(int col=0; col<figures[row].length; ++col) {
                System.out.print(figures[row][col]);
                System.out.print("|");
            }
            System.out.println();
        }
    
        // printing final border
        for(int col=0; col<figures[0].length; ++col) {
            System.out.print("+-");
        }
        System.out.println("+");
    
    
    }
    
  3. # 3 楼答案

    以下代码将初始化数据的2d int数组(示例中为1-5)。然后打印表格。请注意,表结构未保存在字符串2d数组中。把表格打印出来就行了。请参见第行中的注释

    public static void main(String[] args){
            final int num = 5; //hardcoded 5, just for testing.
            final int[][] data = new int[num][num];
            for (int r = 0; r < data.length; r++) {
                for (int c = 0; c < data[r].length; c++) {
                    final int t = r + c + 1;
                    data[r][c] = t <= num ? t : t - num;
                }
            }
            // now we have all int data in data 2D-array    
            // here is the +-+- line
            final StringBuilder sb = new StringBuilder("+");
            for (int i = 0; i < data.length; i++) 
                sb.append("-+");    
            // now print the table
            for (int r = 0; r < data.length; r++) {
                System.out.println(sb.toString());
                for (int c = 0; c < data.length; c++) 
                    System.out.print("|" + data[r][c]);
                System.out.println("|");
            }
            System.out.println(sb.toString());
    
        }
    

    输出:

    如果将num=9作为参数。上述代码将打印:

    +-+-+-+-+-+-+-+-+-+
    |1|2|3|4|5|6|7|8|9|
    +-+-+-+-+-+-+-+-+-+
    |2|3|4|5|6|7|8|9|1|
    +-+-+-+-+-+-+-+-+-+
    |3|4|5|6|7|8|9|1|2|
    +-+-+-+-+-+-+-+-+-+
    |4|5|6|7|8|9|1|2|3|
    +-+-+-+-+-+-+-+-+-+
    |5|6|7|8|9|1|2|3|4|
    +-+-+-+-+-+-+-+-+-+
    |6|7|8|9|1|2|3|4|5|
    +-+-+-+-+-+-+-+-+-+
    |7|8|9|1|2|3|4|5|6|
    +-+-+-+-+-+-+-+-+-+
    |8|9|1|2|3|4|5|6|7|
    +-+-+-+-+-+-+-+-+-+
    |9|1|2|3|4|5|6|7|8|
    +-+-+-+-+-+-+-+-+-+
    
  4. # 4 楼答案

    public static void main(String args[]){
    int dimension = Integer.valueOf(args[0]);
    int[][] twoDimArray = new int[dimension][dimension];
    for(int i=0;i<dimension;i++){
      for(int j=0;j<dimension;j++){
        System.out.print("|"+((i+1)%(dimension+1)));
        }  //end of j loop
     } //end of i loop
    } //end of main
    

    以上只是按指定顺序打印数字的逻辑。 另一个设计模式(+-+)我想你可以处理