Created
May 11, 2012 03:11
-
-
Save delucas/2657297 to your computer and use it in GitHub Desktop.
UNTreF - LP1 - Resolución ejercicio Casa y Terreno
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ar.edu.untref; | |
public class CasaYTerreno { // 1 = obstaculo. 0 = libre | |
private int[][] matrizCasa = { { 0,0,0,0 }, | |
{ 0,0,0,0 }, | |
{ 0,1,1,0 }, | |
{ 1,1,1,1 } }; | |
private boolean casaDentroDeTerreno = false; | |
private char posicionPuerta = 's'; | |
private int[][] matrizTerreno; | |
/** | |
* constructor que recibe matriz terreno | |
* @param terreno contiene matriz del terreno | |
*/ | |
public CasaYTerreno ( int [][] terreno){ | |
this.matrizTerreno = terreno; | |
} //fin constructor | |
/**revisa si la casa entra en un determinado sector del terreno | |
* | |
* @param limiteFila contiene ultima fila de la matriz casa | |
* @param desfasajeFila contiene desplazamientos de filas hacia el sector donde se intenta colocar la casa | |
* @param limiteColumna contiene ultima columna de la matriz casa | |
* @param desfasajeColumna contiene desplazamientos de columnas hacia el sector donde se intenta colocar la casa | |
* @return true si encaja, false si no | |
*/ | |
private boolean encaja ( int limiteFila, int desfasajeFila , int limiteColumna , int desfasajeColumna ){ | |
boolean encaja = true ; | |
for (int i = 0 ; i < limiteFila ; i++){ | |
for (int j = 0 ; j < limiteColumna ; j++){ | |
if (this.matrizCasa [i][j] == this.matrizTerreno [ i + desfasajeFila ][j + desfasajeColumna] && this.matrizCasa [i][j] == 1 ){ | |
encaja = false ; | |
break; | |
} | |
} | |
if (!encaja){ | |
break; | |
} | |
} | |
return encaja ; | |
} //fin metodo | |
/** | |
* coloca la casa en el terreno | |
* @param limiteFila contiene ultima fila de la matriz casa | |
* @param desfasajeFila contiene desplazamientos de filas hacia el sector donde se intenta colocar la casa | |
* @param limiteColumna contiene ultima columna de la matriz casa | |
* @param desfasajeColumna contiene desplazamientos de columnas hacia el sector donde se intenta colocar la casa | |
*/ | |
private void colocarCasaEnTerreno ( int limiteFila, int desfasajeFila , int limiteColumna , int desfasajeColumna ){ | |
for ( int i = 0 ; i < limiteFila ; i ++ ){ | |
for ( int j = 0 ; j < limiteColumna ; j ++ ){ | |
if ( this.matrizTerreno [ i + desfasajeFila][ j + desfasajeColumna] == 0 && this.matrizCasa[i][j]== 1 ){ | |
this.matrizTerreno [ i + desfasajeFila][ j + desfasajeColumna] = 1; | |
} | |
} | |
} | |
}//fin metodo | |
/** | |
* gira la casa | |
*/ | |
private void girarCasa (){ | |
int [][] matrizAuxiliar = new int [4][4]; | |
for (int i = 0 ; i < this.matrizCasa.length ; i++){ | |
for (int j = 0; j < this.matrizCasa[0].length;j++){ | |
matrizAuxiliar [j][this.matrizCasa.length - 1 - i] = this.matrizCasa [i][j]; | |
} | |
} | |
this.matrizCasa = matrizAuxiliar; | |
} //fin metodo | |
/** | |
* revisa si la casa entra en el terreno y si entra la coloca | |
*/ | |
public int [][] ingresoCasaEnTerreno (){ | |
boolean encaja = false ; | |
int giros = 0; | |
int desfasajeFila = 0; | |
int desfasajeColumna = -1; | |
while ( giros < 4 && !encaja ){ | |
desfasajeFila = 0; | |
desfasajeColumna = -1; | |
while ( !encaja && desfasajeFila <= this.matrizTerreno.length - this.matrizCasa.length ){ //intento meter casa en terreno | |
if ( desfasajeColumna == this.matrizTerreno[0].length - this.matrizCasa[0].length ){ | |
desfasajeColumna = 0; | |
desfasajeFila++; | |
} else { | |
desfasajeColumna++; | |
} | |
encaja = this.encaja(this.matrizCasa.length, desfasajeFila, this.matrizCasa[0].length, desfasajeColumna); | |
} | |
giros++; | |
if (!encaja && giros <=3){ //giro la casa | |
this.girarCasa(); | |
switch ( giros ){ | |
case 1: this.posicionPuerta = 'o'; | |
break; | |
case 2:this.posicionPuerta = 'n'; | |
break; | |
case 3:this.posicionPuerta = 'e'; | |
break; | |
} | |
} | |
}//fin while | |
if ( encaja ){ | |
this.colocarCasaEnTerreno(this.matrizCasa.length, desfasajeFila, this.matrizCasa[0].length, desfasajeColumna); | |
this.casaDentroDeTerreno = true; | |
} else { | |
throw new Error ("la casa no entra en el terreno"); | |
} | |
return this.matrizTerreno; | |
} //fin metodo | |
//******************* | |
//METODOS QUE MUESTRAN MATRICES Y ORIENTACION DE LA PUERTA POR CONSOLA (PARA VER RESULTADOS) | |
//utilizado para primer test para ver fallas mas detalladamente | |
//lo que se muestra x consola es lo que se pide en el primer test | |
/** | |
* muestra matrizterreno por consola y casa | |
*/ | |
public void mostrar() { | |
for (int i = 0 ; i < this.matrizTerreno.length; i++){ | |
for (int j = 0 ; j < this.matrizTerreno.length; j++){ | |
System.out.print (" " + this.matrizTerreno [i][j]); | |
} | |
System.out.println(); | |
} | |
for (int i = 0 ; i < this.matrizCasa.length; i++){ | |
for (int j = 0 ; j < this.matrizCasa.length; j++){ | |
System.out.print (" " + this.matrizCasa [i][j]); | |
} | |
System.out.println(); | |
} | |
}//fin metodo | |
/** | |
* muestra orientacion de la puerta por consola | |
* @return posicion puerta | |
*/ | |
public char getPuerta() { | |
System.out.println(this.posicionPuerta) ; | |
return this.posicionPuerta; | |
} | |
} //fin clase |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ar.edu.untref; | |
import org.junit.Assert; | |
import org.junit.Test; | |
public class Tests { | |
@Test | |
public void queSeMuestre (){ | |
int [][] terreno = { { 1,1,1,1,1,1 }, | |
{ 1,1,1,1,0,1 }, | |
{ 1,1,1,0,0,1 }, | |
{ 1,1,1,0,0,1 }, | |
{ 1,1,1,1,0,1 }, | |
{ 1,1,1,1,1,1 }, }; | |
CasaYTerreno vivienda = new CasaYTerreno (terreno); | |
vivienda.ingresoCasaEnTerreno(); | |
vivienda.mostrar (); | |
vivienda.getPuerta(); | |
} | |
@Test | |
public void queLaCasaQuedeDondeCorresponde (){ | |
int [][] terrenoEsperado = { { 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 } }; | |
int [][] terreno = { { 1,1,1,1,1,1 }, | |
{ 1,1,1,1,0,1 }, | |
{ 1,1,1,0,0,1 }, | |
{ 1,1,1,0,0,1 }, | |
{ 1,1,1,1,0,1 }, | |
{ 1,1,1,1,1,1 }, }; | |
CasaYTerreno vivienda = new CasaYTerreno (terreno); | |
Assert.assertArrayEquals(terrenoEsperado , vivienda.ingresoCasaEnTerreno() ); | |
Assert.assertEquals ('e', vivienda.getPuerta()); | |
} //fin metodo | |
@Test | |
public void queLaCasaQuedeDondeCorresponde2 (){ | |
int [][] terrenoEsperado = { { 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,0,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 } }; | |
int [][] terreno = { { 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,0,1,1 }, | |
{ 1,1,0,0,1,1 }, | |
{ 1,0,0,0,0,1 }, | |
{ 1,1,1,1,1,1 }, }; | |
CasaYTerreno vivienda = new CasaYTerreno (terreno); | |
Assert.assertArrayEquals(terrenoEsperado , vivienda.ingresoCasaEnTerreno() ); | |
Assert.assertEquals ('s', vivienda.getPuerta()); | |
} | |
@Test (expected = Error.class) | |
public void queSalteErrorSiLaCasaNoEntra (){ | |
int [][] terreno = { { 1,1,1,1,1,1 }, | |
{ 1,1,1,1,1,1 }, | |
{ 1,1,1,0,1,1 }, | |
{ 1,1,1,0,0,1 }, | |
{ 1,1,1,1,0,1 }, | |
{ 1,1,1,1,1,1 }, }; | |
CasaYTerreno vivienda = new CasaYTerreno (terreno); | |
vivienda.ingresoCasaEnTerreno(); | |
} | |
} //fin clase |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment