Muy buenas, hace poco leí en un libro un ejercicio sobre arrays y me quede un tanto con la duda.
La duda era dentro de en un for con un recorrido de 0 hasta 52.
aparece cuenta % 13, es decir que operación se realiza si cuenta vale 2 por ejemplo.
import java.util.Random;
public class PaqueteDeCartas {
private Carta paquete[]; // creamos un array del tipo Carta (contendrá cartas)
private int cartaActual;
private final int NUMERO_DE_CARTAS = 52;
private Random numeros_aleatorios;
// CONSTRUCTOR DEL PAQUETE CARTAS
public PaqueteDeCartas() {
String caras[] = { "As", "Dos", "Tres", "Cuatro", "Cinco", "Seis",
"Siete", "Ocho", "Nueve", "Diez", "Jota", "Dama", "Rey" };
String palos[] = { "Corazones", "Diamantes", "Treboles", "Picas" };
paquete = new Carta[NUMERO_DE_CARTAS]; // creas un paquete con 52 casillas una para cada carta
cartaActual = 0;
numeros_aleatorios = new Random();
// llenamos el paquete con objetos carta
for (int cuenta = 0; cuenta < paquete.length; cuenta++) {
paquete[cuenta] = new Carta(caras[cuenta % 13], palos[cuenta / 13]);
}
}
En enteros, '%' es el operador MOD o resto. Por ejemplo:
2 mod 4 = 2 -> 2/4 = 0 con 2 de resto
13 mod 3 = 1 -> 13/3 = 4 con 1 de resto
Y como ya sabrás, '/' es el operador de división, pero si se trata de enteros solo se redondea hasta la unidad. Por ejemplo:
2 / 4 = 0
13 / 3 = 4
Y iendo a tu programa, cuando haces cuenta%13 es porque hay 13 distintos tipos de cartas: A,2,3,...Q,K, por lo que tendrás:
cuenta = 0 -> caras[0%13]=caras[0]="As"
cuenta = 1 -> caras[1%13]=caras[1]="Dos"
...
cuenta = 13 -> caras[13%13]=caras[0]="As"
cuenta = 14 -> caras[14%13]=caras[1]="Dos"
Por lo que cada 13 cartas, se repite el ciclo hasta que haya una carta de cada palo, lo que harían las 4x13=52 cartas.
Y para el tema de los palos, a cada pack de 13 cartas le asignas un palo distinto:
cuenta = 0 -> palos[0/13]=palos[0]="Corazones"
cuenta = 1 -> palos[1/13]=palos[0]="Corazones"
...
cuenta = 13 -> palos[13/13]=palos[1]="Diamantes"
cuenta = 14 -> palos[14/13]=palos[1]="Diamantes"
Espero haberte ayudado, saludos.
Osea que se refiere al resto, el resto de 0/13 es 0 por lo que la posición 0 se encuentra el As, 1/13 = resto 1 ahora la posición es 1 y corresponde con el dos.
Es eso verdad ?.