[Java] Error Baraja

FuckingEnemy

Tengo que hacer una baraja, tengo la clase Carta y la clase Baraja, y le tengo que pasar un test de prueba, y ahi viene mi problema... Me da error con el constructor esPoker, esColor y getCartas en el test.

Clase Carta:

package org.mp.bloque2.ejercicio01;

public class Carta {

private int numeroCarta;
private String palo;

public Carta (int numeroCarta, String palo){
	this.numeroCarta = numeroCarta;
	this.palo = palo;
}

public int getNumeroCarta(){
	return numeroCarta;
}
public String getPalo(){
	return palo;
}

public Carta(){
	numeroCarta = 0;
	palo = null;
}

/*Orden palo:
 * oros = 0
 * copas = 1
 * espadas = 2
 * bastos = 3
 */

//Sobreescribimos el metodo equals para poder comparar el numero de carta y el palo.

public boolean equals(Carta carta){
	if(palo.equals(carta.palo)){
		if(numeroCarta == carta.numeroCarta){
			return true;
		}
	}
	return false;
}

/* El metodo compareTo sirve para comparar que una carta si son iguales devuelve 0
 * Si el palo es igual pero la carta es mayor devuelve 1
 * y si no se da esas condiciones de vuelve -1
 */
public int compareTo(Carta carta){
		if(this.equals(carta)){
			return 0;
		}
		else if(this.palo.equals(palo)){
			if(this.numeroCarta > carta.numeroCarta){
				return 1;
			}
		}
	return -1;
}

@Override
public String toString() {
	return "Carta [numeroCarta=" + numeroCarta + ", palo=" + palo + "]";
}
}

Clase Baraja:

package org.mp.bloque2.ejercicio01;
import java.util.Arrays;

public class Baraja {
	
private Carta[] cartas;
private String nombre;

public Baraja(int posicion, String nombre){
	cartas = new Carta[posicion];
	this.nombre = nombre;
	//Vector entrante desdel main
	this.barajar();
}

public Carta getCartas(int i){
	return cartas[i];
}

public String getNombre(){
	return nombre;
}

//Metodo para barajar

public void barajar(){
	Carta cartaAuxiliar;
	int posicionA = 0;
	int posicionB = 0;
	for(int i = 0; i > 4000; i++){
		posicionA = (int) Math.random()*40+1;//Genera un numero cualquiera y lo multiplica por 39
		posicionB = (int) Math.random()*40+1;
		while(posicionA == posicionB){
			posicionB = (int) Math.random()*40+1;
		}
	}
	cartaAuxiliar = cartas[posicionA];
	cartas[posicionA] = cartas[posicionB];
	cartas[posicionB] = cartaAuxiliar;
}

//Metodo para buscar una carta en la baraja

public int buscarCarta(Carta unaCarta){
	int i = 0;
	while(cartas[i].equals(unaCarta)) if(i < cartas.length){
		i++;
	}
	return i;
}

//Metodo que ordena la baraja hecho por el metodo de la burbuja

@SuppressWarnings("null")
public void ordenarBaraja(){
	Carta barajaAuxiliar[] = null;
	for (int n = 0; n < 40; n++){
		barajaAuxiliar[n] = new Carta();
	}
	int t = cartas.length;
	for (int i = 1; i < t; i++) {
		for (int k = t- 1; k >= i; k--) {
			if(cartas[k].compareTo(cartas[k-1]) == 1){
				barajaAuxiliar[k] = cartas[k];
				cartas[k] = cartas[k-1];
				cartas[k-1]=  barajaAuxiliar[k-1];
			}
		}
	}
}

//Metodo jugada mismo color(palo)

public boolean esColor(Carta palo){
	int i = 0; 
	while(cartas[i].equals(palo)) if (i < 5){	
		i++;
		return true;
	}
	return false ;
	
}

public boolean esPoker(Carta numeroCarta){
	int i = 0;
	while(cartas[i].equals(numeroCarta)) if (i < 5){
		i++;
		return true;
	}
	return false;
}

@Override
public String toString() {
	return "Baraja [cartas=" + Arrays.toString(cartas) + ", nombre="
			+ nombre + "]";
}


}

Y el test que le tengo que pasar:

package org.mp.bloque2.ejercicio01;


import junit.framework.TestCase;

public class BarajaTestA extends TestCase {

Carta carta;
Baraja baraja;

public BarajaTestA(String name) {
	super(name);
}

protected void setUp() throws Exception {
	// TODO Auto-generated method stub
	super.setUp();

	Carta[] cartas = new Carta[40];
	String[] palos = { "B", "C", "E", "O" };

	int j = 0;
	for (int k = 0; k < palos.length; k++) {
		for (int i = 1; i < 8; i++) {
			carta = new Carta(i, palos[k]);
			cartas[j] = carta;
			j++;
		}
		for (int i = 10; i < 13; i++) {
			carta = new Carta(i, palos[k]);
			cartas[j] = carta;
			j++;
		}

	}
	baraja = new Baraja(cartas, "Española");

}

public void testEqualsCarta() {
	Carta carta1 = new Carta(5, "O");
	Carta carta2 = new Carta(2, "O");
	Carta carta3 = new Carta(2, "E");
	assertEquals(true, carta1.equals(carta1));
	assertEquals(true, carta2.equals(carta2));
	assertEquals(true, carta3.equals(carta3));

	assertEquals(false, carta3.equals(carta1));
}

public void testCompareToCarta() {
	Carta carta1 = new Carta(5, "O");
	Carta carta2 = new Carta(2, "O");
	Carta carta3 = new Carta(2, "E");
	assertEquals(0, carta1.compareTo(carta1));
	assertEquals(-1, carta1.compareTo(carta3));
	assertEquals(1, carta1.compareTo(carta2));
}

public void testBuscarCarta() {
	Carta carta1 = new Carta(5, "O");
	assertTrue(carta1.equals(baraja.buscarCarta(carta1)));
	Carta carta2 = new Carta(5, "W");
	assertNull(baraja.buscarCarta(carta2));
}

public void testOrdenarBaraja() {

	baraja.ordenarBaraja();
	
	Carta[] cartas = baraja.getCartas();
	for (int i = 0; i < cartas.length - 1; i++) {
		assertEquals(-1, cartas[i].compareTo(cartas[i + 1]));
	}

}

public void testJugada() {

	Carta carta1 = new Carta(5, "E");
	Carta carta2 = new Carta(2, "E");
	Carta carta3 = new Carta(2, "E");
	Carta carta4 = new Carta(2, "E");
	Carta carta5 = new Carta(2, "E");
	Carta carta6 = new Carta(11, "O");

	Carta[] jugada1 = { carta1, carta2, carta3, carta4, carta5 };
	assertTrue(baraja.esColor(jugada1));

	Carta[] jugada2 = { carta1, carta2, carta3, carta4, carta6 };
	assertFalse(baraja.esColor(jugada2));

	assertTrue(baraja.esPoker(jugada1));
	assertFalse(baraja.esPoker(jugada2));

}

public void testBarajar() {


	Carta[] cartasOrdenadas = new Carta[baraja.getCartas().length];
	for (int i = 0; i < cartasOrdenadas.length; i++) {
		cartasOrdenadas[i] = baraja.getCartas()[i];
	}

	baraja.barajar();

	Carta[] cartasBarajadas = baraja.getCartas();

	int contador = 0;
	for (int i = 0; i < cartasBarajadas.length; i++) {
		if (cartasOrdenadas[i].equals(cartasBarajadas[i])) {
			System.out.println(i + "---" + cartasOrdenadas[i] + "---"
					+ cartasBarajadas[i]);
			contador++;
		}
	}
	assertTrue(contador < 4);
}

}
Shendraf

A ver, en la clase Baraja tienes el constructor:

 public Baraja(int posicion, String nombre){
                 cartas = new Carta[posicion];
                this.nombre = nombre;                 
//Vector entrante desdel main this.barajar(); }

Y en la función BarajaTestA.setUp estás creando una instancia de esta manera:

Carta[] cartas = new Carta[40];
baraja = new Baraja(cartas, "Española");

Es decir, tienes que pasarle una posición pero le estás pasando un array de Carta.

Usuarios habituales

  • Shendraf
  • FuckingEnemy