我如何对一个int数组的ArrayList进行排序?

问题描述 投票:0回答:1

我有此代码。我正在处理N皇后问题。

问题是当我想按屏幕显示结果时,数组未排序。但是在这段代码中,我无法使用Comparator对其进行排序。这很奇怪,因为在其他类中,它可以使用Comparator完美地工作,但是在这里它不起作用。希望有人能帮助我。预先感谢。

import java.util.*;

public class NReinas {

public static void resolverReinas(int n){

    String[][] tablero;

    tablero = generarTablero(n);
    ubicarReina(tablero, 0, n);
}

public static void ubicarReina(String[][] tablero, int etapa, int n){

   ArrayList <int[]> resultados = new ArrayList<>();

    for(int i = 0; i < tablero.length; i++){
        if(isValido(tablero, i, etapa)){
            tablero[i][etapa] = "R";


            if(etapa < tablero.length - 1){
                ubicarReina(tablero, etapa + 1, n); //Recursividad
            }else {
                resultados.add(devolverSolucion(tablero, n));
            }
            tablero[i][etapa] = " "; //Backtracking: vaciamos el tablero
        }
    }

    //The ArrayList I want to order by int arrays
    for (int[] r : resultados) {
        System.out.println(Arrays.toString(r));
    }


}

public static boolean isValido(String[][] tablero, int i, int etapa){
    for(int x = 0; x < etapa; x++){
        if(tablero[i][x].equals("R")){
            return false;
        }
    }

    for(int j = 0; j < tablero.length && (i-j) >= 0 && (etapa-j) >=0; j++){
        if(tablero[i - j][etapa - j].equals("R")){
            return false;
        }
    }

    for(int j = 0; j < tablero.length && (i + j) < tablero.length && etapa - j >= 0; j++){
        if(tablero[i + j][etapa - j].equals("R")){
            return false;
        }
    }

    return true;
}

public static String[][] generarTablero(int length){
    String[][]res = new String[length][length];
    for (int i = 0; i < res.length; i++) {
        for (int j = 0; j < res.length; j++) {
            res[i][j] = " ";
        }
    }
    return res;
}

public static int[] devolverSolucion(String[][] tablero, int n){

    int[] solucion = new int[n];

    for (int i = 0; i < tablero.length; i++) {
        for (int j = 0; j < tablero.length; j++) {

            if(tablero[i][j] == "R"){
                solucion[i] = j;
            }
        }

    }
    return solucion;
}

}

arraylist comparator
1个回答
0
投票

尝试使用Integer而不是int,而是将数组值保存在List上,以便可以对它们进行排序

List<Integer> list = Arrays.asList(solucion);
Collections.sort(list);

如果您坚持使用and数组,则可以将列表重新转换为数组

(Integer[]) list.toArray();
© www.soinside.com 2019 - 2024. All rights reserved.