Verifique la duplicación de números en ArrayList - Java

Actualmente estoy haciendo un programa de sudoku, sin embargo, mi código actual parece fallarme. La secuencia de comandos a continuación debería publicar una impresión "Rompecabezas de sudoku inconsistente" si una fila contiene el mismo número varias veces, pero lamentablemente no lo hace. He intentado varios intentos diferentes pero no he tenido éxito.

public void checkRow() {
    int count = 0;

    for(int j = 0; j < list.size(); j++) {
        for(int a = 1; a < 10; a++) {
            for (int i=0; i < list.get(j).length(); i++) {
                if(list.get(j).charAt(i) == a) {
                    count++;
                    if(count >= 2) {
                        System.out.println("Inconsistent sudoku puzzle");
                        count = 0;
                    }
                }
            }
            count = 0;
        }
    }
}

Esta es la colección de todas mis comprobaciones de error:

public void errorCheck() {
    this.checkRow();
    this.checkColumn();
    this.checkBox();
}

Aquí lo cargo en mi principal. El código es mucho más elaborado, pero estas deberían ser las secciones relacionadas con el problema.

public static void main(String[] args) throws Exception  {
    Sudoku s = new Sudoku("C:\\Users\\caspe\\Downloads\\Sudoku001.sdk");
    s.printBoard();
    s.errorCheck();
    s.getNum();


    while(getNum() > 0) {
        System.out.println("Next move, please (row , column , value )");
        Scanner scanner = new Scanner(System.in);
        int row = scanner.nextInt();
        int column = scanner.nextInt() ;
        int value = scanner.nextInt();
        if (s.moves(row, column, value)); {
            s.errorCheck();
        }

        s.printBoard();
    }
}
Respuesta 1

Esta línea:

if(list.get(j).charAt(i) == a)

siempre es falseporque comparas un charcon un int.

Reemplácelo con

if((list.get(j).charAt(i)-'0') == a)

list.get(j).charAt(i)-'0' te da la representación numérica del char

Respuesta: 2

La cuestión

Estás usando charAte intentando comparar el resultado de eso con un número:

list.get(j).charAt(i) == a 

Sin embargo, al hacerlo, estás comparando el valor ASCII del personaje con el número.

Ejemplo :

String a = "3";
System.out.println((int) a.charAt(0)); // This prints 51

La solución

Si quisiera comparar valores numéricos, tendría que hacer algo como esto:

String a = "3";
System.out.println(Character.getNumericValue(a.charAt(0))); // This prints 3

Character.getNumericValue(a.charAt(0)) devuelve el valor numérico del personaje.


Implementación

Implementar eso en su código se vería así:

Character.getNumericValue(list.get(j).charAt(i)) == a
Respuesta: 3

Soy nuevo en Cassandra y Spark e intento obtener datos de DB usando spark. Estoy usando Java para este propósito. El problema es que no hay excepciones lanzadas o se produjo un error, pero aún así no puedo ...

Sé que 2389% 10 es 9, pero ¿cómo podría crear un método que tome 2 parámetros? Uno para el número y el otro para el índice y devolverá el valor en el índice ...

Actualmente estoy empezando a aprender Java y he intentado recrear el Juego de la vida de Conway. Mi código funciona a medida que las células mueren y nacen, pero no parecen seguir las reglas previstas. Soy ...

Quiero verificar cuánta memoria se usa en mi aplicación Java, y luego usé: System.out.println ("Memoria libre (bytes):" + Runtime.getRuntime (). FreeMemory () / (1024 * 1024 * 1024 )); ...