逻辑和创建表的问题

时间:2014-01-11 19:17:38

标签: java arrays logic

我正在尝试使用方法创建一个表,并且我的逻辑错误或堆栈溢出导致我的问题,这是我正在尝试创建的... 1 1 1 1 1 1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1 这就是我得到的

1 1 1 1 1  
2 2 2 2 2  
1 2 3 2 1  
2 2 2 2 2  
1 1 1 1 1  
[[I@4d0948bd

这是我的代码,它只是那些需要为1的4角2,如果修复了我的错误可能会修复。

public class Server{
    public static int[][] tableMaker(){
        int[][] table = new int[5][5];
        for(int i=0; i<table.length; i++){
            for(int j=0; j<table.length; j++){
                if(i==2 && j==2){
                    table[i][j] =3;
                }
                if(i==0 || i==4){
                    table[i][j] = 1;
                }
                if(j==4 || j==0){
                    table[i][j] = 1;
                }
                if((i==1 || i==3) && (j>0 || j<4)){
                    table[i][j] = 2;
                }
                if((i==2 && j==1) || (i==2 && j==3)){
                    table[i][j] = 2;
                }
            }
        }
        for(int i=0; i<table.length; i++){
            for(int j=0; j<table.length; j++){
                System.out.print(table[i][j] + " ");
            }
            System.out.println();
        }
        return table;
    }
}  

这是我在客户端的打印命令

public class Client{
    public static void main(String[] args){

        System.out.println(Server.tableMaker());
    }
}

2 个答案:

答案 0 :(得分:3)

  1. 不要调用println并传入tableMaker()方法。这就是导致你从二维int数组获得默认toString()结果的原因,[[I @ 4d0948bd。而只需调用tableMaker方法。
  2. 首先在纸上创建并思考创建表所需的步骤,重新思考如何创建表的逻辑。我会使用if + else if blocks。即,如果单元格位于边缘,则放入一个,否则如果单元格距离边缘一个(将逻辑转换为Java)放入2,否则如果,...
  3. 如果这是我的方法,我根本不会在方法中有任何println或print命令。我创建并返回2D数组,然后让调用代码决定如何处理数组 - 可能它会使用嵌套for循环,就像你的方法一样,但这取决于调用代码。

答案 1 :(得分:1)

您可能已经解决了这个问题,但您只需更改一行

if((i==1 || i==3) && (j>0 || j<4)){

if((i==1 || i==3) && (j>0 && j<4)){