Gitrot
Intento 1 imitación de deepToString
for (int i = 0; i < tabla.length; i++) {
System.out.print("[");
for (int j = 0; j < tabla[i].length; j++) {
if (j != tabla[i].length - 1) {
System.out.print(tabla[i][j] + ", ");
} else {
System.out.println(tabla[i][j] + "]");
}
}
}
Matriz a String
public class MatrizToString {
static String stringMatriz(int[][] t){
String Str = "";
if (t.length == 0) {
Str = "[]";
return Str;
}
for (int i = 0; i < t.length; i++) {
if (t[i] == null || t[i].length == 0) {
if(i==0){ Str += "[]";
} else { Str += String.format("%n%s", "[]");}
}else{
Str += String.format("%n%s", "[ ");
for (int j = 0; j < t[i].length; j++) {
if (j != t[i].length - 1) {
Str += t[i][j] + " | ";
} else {
Str += t[i][j] + " ]";
}
}
}
}
return Str;
}
public static void main(String[] args) {
int[][] tabla = new int[5][5];
System.out.println(stringMatriz(tabla));
}
}
Array a String
public class ArrayToString {
static String stringArray(int[] array) {
String arrayStr = "";
if (array.length == 0) {
arrayStr += "[]";
return arrayStr;
}
for (int i = 0; i < array.length; i++) {
arrayStr = "[ ";
if (i > 0 && i < array.length) {
arrayStr += " | ";
}
arrayStr += array[i];
if (i == array.length - 1) {
arrayStr += " ]";
}
}
return arrayStr;
}
public static void main(String[] args) {
int[] array = new int[5];
System.out.println(stringArray(array));
}
}
S⏫el Arrays.toString no lo optimiza suficiente???
I->S Sí, pero con esta función modifico que separadores utiliza.
Tablero Ajedrez
No me gusta como quedó personalmente

Movimiento peon de ajedrez
static boolean movimientoPeon(int[] movConFormato, char[][] tablero, boolean turnoBlancas, int[][] historial){
boolean movEsValido = false;
int columnaInicioMovAnterior = historial[historial.length-1][1];
int columnaFinalMovAnterior = historial[historial.length-1][3];
int filaMovAnterior = historial[historial.length-1][4];
int columnaOrigen = movConFormato[0];
int filaOrigen = movConFormato[1];
int columnaDestino = movConFormato[2];
int filaDestino = movConFormato[3];
if (turnoBlancas){
if (filaDestino == filaOrigen - 1 && tablero[filaDestino][columnaDestino] == '-') { //avanzar si no hay piezas delante
movEsValido = true;
} else if (filaDestino == filaOrigen - 1 && (columnaDestino == columnaOrigen + 1 || columnaDestino == columnaOrigen - 1) && (tablero[filaDestino][columnaDestino] != '-' || (tablero[filaDestino][columnaDestino] == '-' && (tablero[filaOrigen][columnaDestino-1] == 'p' || tablero[filaOrigen][columnaDestino+1] == 'p') && (columnaInicioMovAnterior == columnaDestino && columnaFinalMovAnterior == columnaDestino && filaMovAnterior == filaDestino - 1)))){ //Capturar en diagonal y Anpasant
//Captura diagonal
//Si el peon avanza en diagonal filaDestino == filaOrigen - 1 && (columnaDestino == columnaOrigen + 1 || columnaDestino == columnaOrigen - 1)
//Sí si hay una ficha que capturar tablero[filaDestino][columnaDestino] != '-'
//Anpasant
//O si hay un peon al lado (tablero[filaDestino][columnaDestino] == '-' && (tablero[filaOrigen][columnaDestino-1] == 'p' || tablero[filaOrigen][columnaDestino+1] == 'p')
//Y el movimiento del rival fue avanzar recto el peon de en frente a al lado (columnaInicioMovAnterior == columnaDestino && columnaMovAnterior == columnaDestino && filaMovAnterior == filaDestino + 1)
movEsValido = true;
} else if (filaOrigen==tablero.length-2 && filaDestino == filaOrigen - 2 && tablero[filaDestino][columnaDestino] == '-'){ //Doble avance inicial
movEsValido = true;
}
}else{
if (filaDestino == filaOrigen + 1 && tablero[filaDestino][columnaDestino] == '-') { //avanzar si no hay piezas delante
movEsValido = true;
} else if (filaDestino == filaOrigen + 1 && (columnaDestino == columnaOrigen + 1 || columnaDestino == columnaOrigen - 1) && (tablero[filaDestino][columnaDestino] != '-' || (tablero[filaDestino][columnaDestino] == '-' && (tablero[filaOrigen][columnaDestino-1] == 'p' || tablero[filaOrigen][columnaDestino+1] == 'p') && (columnaInicioMovAnterior == columnaDestino && columnaFinalMovAnterior == columnaDestino && filaMovAnterior == filaDestino + 1)))){ //Capturar en diagonal y Anpasant
movEsValido = true;
} else if (filaOrigen==tablero.length-2 && filaDestino == filaOrigen + 2 && tablero[filaDestino][columnaDestino] == '-'){ //Doble avance inicial
movEsValido = true;
}
}
return movEsValido;
}
S⏫ explica como funciona el sub array de historial porque me pierdo
I->S Es un array que guarda los array de los movimientos anteriores, lo utilizo para saber que movimiento hizo el jugador rival en su turno previo para verificar las condiciones del Ampasant.
S->I Pero solo sirve para guardar el movimiento inmediatamente anterior, no???
I->S No, en el main está implementado que vaya añadiendo cada nuevo movimiento valido
S->I Para que necesitas que guarde cada movimiento válido? Quieres hacer una grabación de toda la partida?
S->I Además que llamas a posiciones fijas del array, esto no hace que siempre esté viendo el mismo historial???
I->S No, la posición fija es dentro del ultimo array guardado, hace referencia a la posición del movimiento (a1 b2) le estoy diciendo que coja el "b2" por ejemplo, que es siempre el 3 y 4 del ultimo array guardado
Conseguí hacer el de siguiente matricula con los char =)
static String siguienteMatricula(String matricula) {
if (matricula == null || matricula.length() != 7) {
return null;
}
String siguiente = "";
boolean continuar = true;
String numeros = matricula.substring(0, 4);
String letras = matricula.substring(4);
int cifra = Integer.parseInt(numeros);
cifra++;
if (cifra > 9999) {
numeros = "0000";
letras.toUpperCase();
char[] letra = letras.toCharArray();
for (int i = letra.length - 1; i >= 0 && continuar == true; i--) {
int letraUni = letra[i];
letraUni++;
if (letraUni > 90) {
letra[i] = 'B';
} else {
if (letraUni == 69 || letraUni == 73 || letraUni == 79 || letraUni == 85) {
letraUni++;
}
letra[i] = (char) letraUni;
continuar = false;
}
}
letras = Arrays.toString(letra);
letras = letras.replace("[", "");
letras = letras.replace("]", "");
letras = letras.replace(",", "");
letras = letras.replace(" ", "");
} else {
numeros = Integer.toString(cifra);
}
siguiente = numeros + letras;
return siguiente;
}