arraylist - 如何对 int 数组的 ArrayList 进行排序?
问题描述
我有这个代码。我正在处理 N-Queen 问题。
问题是当我想按屏幕显示结果时,数组没有排序。但在这段代码中,我无法使用 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;
}
}
解决方案
尝试使用 Integer 而不是 int 并将数组值保存在 List 上,这样您就可以对它们进行排序
List<Integer> list = Arrays.asList(solucion);
Collections.sort(list);
如果您坚持使用和数组,您可以将列表重新转换为数组
(Integer[]) list.toArray();
推荐阅读
- r - 如何在R中形成两个数据集的矩阵?
- google-analytics - 如何在 GA4 中定义目标(新版)
- botframework - 传出 webhook 为 msteams 提供的 Adaptive Card 的 messageBack 操作失败,并显示“资源 URL 格式错误”。
- node.js - NodeJS + MongoDB - 想要添加更多嵌套值
- flutter - 错误状态:调用来自 FirebaseAuth.veryfyPhone 的 phoneCodeAutoRetrievalTimeout 回调后无法添加新事件。富特
- javascript - jcrop-holder 在我的实时页面上重复
- java - XSD 元素命名空间验证失败
- arduino - 如果不再移动,Arduino停止过程如何解决
- c# - 分块内存流为空
- assembly - grub 似乎没有正确加载我的内核