如何在NQueens中打印结果

时间:2018-11-20 03:54:52

标签: java

我是JAVA的新手。下面是我的NQueens问题代码。结果为[[Ljava.lang.String; @ 123a439b,[Ljava.lang.String; @ 7de26db8]。

有人可以帮忙吗?非常感谢你!我复制了别人博客的代码。该代码应正确。我只是不知道如何打印结果。我认为这应该不是很难。我的背景不是计算机科学,这也许就是我遇到麻烦的原因。谢谢!

import java.util.ArrayList;


public class Solution {
public ArrayList<String[]> solveNQueens(int n) {
    ArrayList<String[]> res = new ArrayList<String[]>();
    if(n<=0)
        return res;

    int [] columnVal = new int[n];

    DFS_helper(n,res,0,columnVal);

    return res;
}

public void DFS_helper(int nQueens, ArrayList<String[]> res, int row, int[] columnVal){
    if(row == nQueens){
        String[] unit = new String[nQueens];
        for(int i = 0; i < nQueens; i++){
            StringBuilder s = new StringBuilder();
            for(int j = 0; j < nQueens; j++){
                if(j == columnVal[i])
                    s.append("Q ");
                else
                    s.append("+ ");
            }

            unit[i] = s.toString();
            //System.out.println(unit[i]);

        }

        //System.out.println();

        res.add(unit);

      // System.out.println(Arrays.toString(res));
       //return;
    }

    else{
        for(int i = 0; i < nQueens; i++){
            columnVal[row] = i;//(row,columnVal[row)==>(row,i)

            if(isValid(row,columnVal))
                DFS_helper(nQueens, res, row+1, columnVal);
        }
    }
}

public boolean isValid(int row, int [] columnVal){
    for(int i = 0; i < row; i++){
        if(columnVal[row] == columnVal[i]
           ||Math.abs(columnVal[row]-columnVal[i]) == row-i)
           return false;
    }
    return true;
}


public static void main(String[] args) {
    Solution su = new Solution();
    int n = 4;

    System.out.println(su.solveNQueens(n));
}
}

1 个答案:

答案 0 :(得分:1)

在执行System.out.println(su.solveNQueens(n));时,它会打印数组的列表内容,而只是打印数组对象,但不打印其内容。因此,要打印array内容,您需要遍历它们。

Arrays.toString Returns a string representation of the contents of the specified array. 

https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#toString(java.lang.Object[])

将结果放入list中,然后打印:

List<String[]> res = su.solveNQueens(n);
for(String strs[] : res) {
            System.out.println(Arrays.toString(strs));
}

您也可以这样做,因为上面印有,。这里遍历列表,然后遍历数组。

List<String[]> res = su.solveNQueens(n);
for(String strs[] : res) {
        for(String s: strs) {
            System.out.print(s+ " ");
        }
        System.out.println();
    }

在Java 8中,您可以使用streamlambda

ArrayList<String[]> result = su.solveNQueens(n)
result.stream().forEach(i->System.out.println(Arrays.toString(i)));