public class Casilla{
public static final char NEGRO='N';
public static final char BLANCO='B';
private char color;
public Casilla(char c){
color=c;
}
public char getColor(){
return color;
}
public void setColor(char c){
color=c;
}
public boolean iguales(Casilla c){
if(getColor()==c.getColor()) return true;
else return false;
}
}
public class Tablero{
private Casilla tablero[][];
public Tablero(int dimension){
Casilla[][] tablero=new Casilla [dimension][dimension];
Casilla casB=new Casilla('B');
Casilla casN=new Casilla('N');
tablero[0][0]=casB;
for(int i=0; i<tablero.length;i++){
for(int j=0; i<tablero[i].length;j++){
if((i+j)%2==0) tablero[i][j]=casB;
else tablero[i][j]=casN;
}
}
}
public Casilla[][] getTablero(){
return tablero;
}
}
public class PruebaTablero{
public static void main(String args[]){
Casilla tab1[][];
Tablero tab=new Tablero(8);
tab1=tab.getTablero();
for (int i=0; i<tab1.length;i++){
for(int j=0;j<tab1.length;j++){
System.out.println(tab1[i][j]);
}
}
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at Tablero.<init>(Tablero.java:12)
at PruebaTablero.main(PruebaTablero.java:4)
jomofer escribió:Pues creo que es por esto: "for(int j=0; i<tablero[i].length;j++){". La primera "i" que aparece deberia ser una "j".
public class Tablero{
private Casilla tablero[][];
public Tablero(int dimension){
Casilla[][] tablero=new Casilla [dimension][dimension];
Casilla casB=new Casilla('B');
Casilla casN=new Casilla('N');
tablero[0][0]=casB;
for(int i=0; i<tablero.length;i++){
for(int j=0; j<tablero[i].length;j++){
if((i+j)%2==0) tablero[i][j]=casB;
else tablero[i][j]=casN;
}
}
}
public Casilla[][] getTablero(){
return tablero;
}
}
public class Casilla{
public static final char NEGRO='N';
public static final char BLANCO='B';
private char color;
public Casilla(char c){
color=c;
}
public char getColor(){
return color;
}
public void setColor(char c){
color=c;
}
public boolean iguales(Casilla c){
if(getColor()==c.getColor()) return true;
else return false;
}
}
public class PruebaTablero{
public static void main(String args[]){
Casilla tab1[][];
Tablero tab=new Tablero(8);
tab1=tab.getTablero();
for (int i=0; i<tab1.length;i++){
for(int j=0;j<tab1[i].length;j++){
System.out.println(tab1[i][j].getColor());
}
}
}
}
Exception in thread "main" java.lang.NullPointerException
at PruebaTablero.main(PruebaTablero.java:6)
public class Tablero{
private Casilla tablero[][];
public Tablero(int dimension){
tablero=new Casilla [dimension][dimension];
Casilla casB=new Casilla('B');
Casilla casN=new Casilla('N');
tablero[0][0]=casB;
for(int i=0; i<tablero.length;i++){
for(int j=0; j<tablero[i].length;j++){
if((i+j)%2==0) tablero[i][j]=casB;
else tablero[i][j]=casN;
}
}
}
public Casilla[][] getTablero(){
return tablero;
}
}
public class Tablero{
private Casilla tablero[][];
public Tablero(int dimension){
this.tablero=new Casilla [dimension][dimension];
for(int i=0; i<tablero.length;i++){
for(int j=0; j<tablero[i].length;j++){
if((i+j)%2==0){
tablero[i][j]=new Casilla('B');
}
else{
tablero[i][j]=new Casilla('N');
}
}
}
}
public Casilla[][] getTablero(){
return tablero;
}
}
jomofer escribió:Me ha costado verlo . En la clase Tablero, rellenas una variable "tablero", pero esa no es la misma que su atributo de arriba (que lo llamas igual).
Quedaria asi:public class Tablero{
private Casilla tablero[][];
public Tablero(int dimension){
tablero=new Casilla [dimension][dimension];
Casilla casB=new Casilla('B');
Casilla casN=new Casilla('N');
tablero[0][0]=casB;
for(int i=0; i<tablero.length;i++){
for(int j=0; j<tablero[i].length;j++){
if((i+j)%2==0) tablero[i][j]=casB;
else tablero[i][j]=casN;
}
}
}
public Casilla[][] getTablero(){
return tablero;
}
}
Edito. Te lo pongo algo mejor:public class Tablero{
private Casilla tablero[][];
public Tablero(int dimension){
this.tablero=new Casilla [dimension][dimension];
for(int i=0; i<tablero.length;i++){
for(int j=0; j<tablero[i].length;j++){
if((i+j)%2==0){
tablero[i][j]=new Casilla('B');
}
else{
tablero[i][j]=new Casilla('N');
}
}
}
}
public Casilla[][] getTablero(){
return tablero;
}
}
Antes tu rellenabas cada casilla con la misma referencia. Es mejor crear un objeto nuevo para que sean diferentes.
Clase jugada:public class Jugada extends JPanel{
GroupLayout GL = null;
public Jugada() {
setBorder(javax.swing.BorderFactory.createTitledBorder("MiJugada"));
setName("MiJugadaName");
GL = new javax.swing.GroupLayout(this);
this.setLayout(GL);
System.out.println(this.getX());
GL.setHorizontalGroup(
GL.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 244, Short.MAX_VALUE)
);
GL.setVerticalGroup(
GL.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 31, Short.MAX_VALUE)
);
}
}
Y la clase principal (pongo solo un metodo, los otros son irrelevantes)public class MenuPrincipalView extends JPanel {
[...]
private void initCustomComponent(Component C) {
javax.swing.GroupLayout layout = (GroupLayout) this.getLayout();
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(C, 100, 500, 1000)
.addContainerGap(313, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(C, 100, 500, 1000)
.addContainerGap(384, Short.MAX_VALUE))
);
}
[...]
}
Resultado:
zaius5 escribió:Tengo una nueva duda y voy a intentar explicarme lo mejor posible
-Creo una clase con un atributo boolean y dos metodos que cambien ese atributo a false o true
-Creo otra clase,tiene como unico atributo un array de objetos de la clase creada anteriormente
ahora intento cambiar el atributo de uno de los objetos del array(osea cambiar el atributo de la primera clase creada)pero al cambiar uno me los cambia todos ,a ver si alguien lo entiende y me explica el porque de que secambien todos
Tenemos la clase:Class Entero {
public int i = 0;
public Entero(int n) {
i = n;
}
}
Ejemplo de mal hecho:Entero ent = new Entero(123);
Entero[] lista = new Entero[5];
for (int i = 0; i < lista.length; i++)
lista[i] = entero;
lista[0].i = 12;
Como cada elemento del array apunta al mismo objeto, entonces todos son modificados
El mismo bien hechoEntero[] lista = new Entero[5];
for (int i = 0; i < lista.length; i++)
lista[i] = new Entero(123);
lista[0].i = 12;
En este caso cada uno apunta un objeto distinto, entonceslos demas objetos no son modificados
xgc1986 escribió:Tengo un problema, estoy intentando hacer una aplicacion con JAVA, pero el problema es que tengo un panel y dentro de este quiero incorporarle otro, pero no se como decir que me lo ponga en una posicion en concreto.
Flanders escribió:Perdonad que me entrometa en un hilo ya avanzado, pero es que llevo algún tiempo queriendo aprender o Java a C#. El problema que me surge es que de C# no hay ningún libro interesante en castellano y los que hay en inglés son autenticos ladrillos de más de 1000 páginas que me apetece leer sin no tener asentados los conocimientos de la POO en catellano.
Así pues, de momento estoy buscando a ser posible un libro de Java, pero que comience explicando la POO y luego vaya introduciendose poco a poco en el lenguaje Java. Empecé a leerme el libro Head First Object Oriented Analysis and Design, pero ya para empezar empiezan diciendo que saber algo de Java es fundamental para seguir el libro. Así pues, descartado.
¿Qué os parecen los libros Piensa en Java y Cómo Programar en Java? ¿Cual me aconsejais para empezar y que empiece hablando de la POO? ¿Algún libro más actual que éstos y que merezca igualmente la pena para empezar?
Por cierto, recuerdo que hace unos meses empecé a leerme el libro de Piensa en Java y lo dejé casi al comienzo, porque tenía una traducción un tanto extraña. Ejemplo: "Este capítulo es material de fondo y suplementario. Mucha gente no se siente cómoda vadeando la programación orientada al objeto sin entender el cuadro grande primero. Así, hay muchos conceptos que se introducen aquí para darle una descripción sólida de OOP. Sin embargo, la gente puede no comprender los conceptos del cuadro grande hasta el heber visto algo del mecanismo primero; esta gente puede empantanarse y perderse sin un cierto código para conseguir meter sus manos." ¿Mande?
Un saludo y gracias por todo.
ACTUALIZO: Acabo de mirar el Core Java que aconsejais y no tiene mala pinta. ¿Es fácil para empezar?
xgc1986 escribió:Para aprender a programar, en mi opinion C# es contraindicado, ya que el visual studio lohace todo por ti, con JAVA practicamente es lo mismo si usas un IDE, pero C# es una clara copia de JAVA per mejorada. Si de verdad quieres aprender a programar te recomiendo utilizar C++, una vez aprendido memoria dinamica y OOP, entonces pasar a JAVA y aprendido polimorfismo, herencia, interfaces, etc. passar a C# para aprender a trabajar con ventanas y cosas asi.
ShinMegami escribió:hola, tengo una duda, me gustaria crear un int que en cada ejecucion tenga un valor aleatorio... como se tendria que hacer eso?
Jonri escribió:ShinMegami escribió:hola, tengo una duda, me gustaria crear un int que en cada ejecucion tenga un valor aleatorio... como se tendria que hacer eso?
http://www.cs.geneseo.edu/~baldwin/refe ... andom.html
Para que en cada ejecución sea diferente, como semilla deberías meter por ejemplo el tiempo.
un saludo
oscarmu escribió:Esoty leyendo el hilo y en los ultimos threads sale C#. He estado buscando ni aun no he conseguido encontrar la diferencia entre C# y JAVA.
Estudiando DAI programe con Visual Basic .net, y todo era muy facil, ponias el boton, i definias su funcion. Eso es asi con JAVA i C#?
Gracias de adelantado por la explicacion.
McCaan escribió:Hola, se programar en java un poco y me gustaria aprender algun api grafico, me recomendais alguno en especial?
Otra cosa, estaba pensando en pillarme un libro, la biblia de Java o el Core Java2 Vol1, para lo q quiero,cual seria mejor? S irven los dos?
Algun sitio donde venga el indice de los dos, es q me lo quiero pillar por internet y no me lo queiro pillar sin saber en que se centra
Salu2
ShinMegami escribió:
si quiero hacerlo en javascript importo el paquete igual? lo pongo encima de los scripts?
oscarmu escribió:McCaan escribió:Hola, se programar en java un poco y me gustaria aprender algun api grafico, me recomendais alguno en especial?
Otra cosa, estaba pensando en pillarme un libro, la biblia de Java o el Core Java2 Vol1, para lo q quiero,cual seria mejor? S irven los dos?
Algun sitio donde venga el indice de los dos, es q me lo quiero pillar por internet y no me lo queiro pillar sin saber en que se centra
Salu2
Soy novato en JAVA. Mire el libro de Herst First in Java i es una marranada. Todo con dibujos...digamos que te ensenyan a programar de manera general, no en JAVA.
Ahora estoy con el Core Java vol1 en ingles (google es tu amigo) i pinta muy bien. Tanto que lo he pedido a la libreria.
-------
Una duda sobre JAVA i la plataforma .net. Cuando programaba con visual basic .net podia hacer los eventos de los botones...muy facilmente.
En java tambien es asi?
McCaan escribió:Ya he mirado el indice de la Biblia de Java y de Core Java Vol1 y para lo q yo lo quiero (aprender un entorno grafico) a primera vista parece mejor la biblia de java pero he mirado un par de webs y lo tienen descatalogado, y aunke lo tenga en pdf, al ser tantas pag me va a costar lo mismo imprimirlo q comprarlo, asi q prefiero comprarlo.
Por cierto, segun he entendido para un entorno grafico es mejor swing q awt, correcto?
Salu2
Edito--->No habia visto lo q decias del Swing Fox, pero segun he visto por la red recomiendan mas el Swing
public static int [] Pares5(int [][] in) {
int [] out = new int[5];
for(int i = 0; i < in.length; i++) {
for(int j = 0; j < in[i].length; j++) {
if(in[i][j] % 2 == 0) {
out[i] = in[i][j];
}
else {
out[i] = -1;
}
}
}
return out;
}
Puyover escribió:Buenas!
Estoy haciendo un método en java que le pases una matriz bidimensional y te devuelta una matriz unidimensional con los 5 primeros valores pares de la matriz pasada (donde no sea par, sustituir por -1)...
El problema es que no se como hacer esa parte. La lógica está bien, lo que pasa es que no se me ocurre como leches recorrer la matriz a la cual pasarle los valores pares de la otra matriz, sin sobrescribirlos :S
Aquí os dejo el método que no consigo que funcione bien:public static int [] Pares5(int [][] in) {
int [] out = new int[5];
for(int i = 0; i < in.length; i++) {
for(int j = 0; j < in[i].length; j++) {
if(in[i][j] % 2 == 0) {
out[i] = in[i][j];
}
else {
out[i] = -1;
}
}
}
return out;
}
Como veis reutilizo la variable i de las filas para recorrer out... pero claro haciendo eso, voy sobrescribiendo los valores anteriores...
Alguna ayuda?
public class Alfil{
/** Atributo de posicion, coordenada x */
public int x;
/** Atributo de posicion, coordenada y */
public int y;
/**
* Constructor con parametros de una figura Alfil.
*/
public Alfil(int xp,int xy){
x=xp;
y=xy;
}
/** Metodo de obtencion del valor de la coordenada x de la figura.*/
public int getX(){
return x;
}
/** Metodo de obtencion del valor de la coordenada y de la figura.*/
public int getY(){
return y;
}
/** Metodo de cambio de valor de la coordenada x de la figura.*/
public void setX(int newposX){
this.x=newposX;
}
/** Metodo de cambio de valor de la coordenada y de la figura.*/
public void setY(int newposY){
this.y=newposY;
}
/** Metodo que devolvera true si se han podido modificar las
*coordenadas del alfil y false si el movimiento no esta
*permitido o hay un alfil a lo largo del movimiento
*@return Variable que indica si se ha podido mover o no*/
public boolean mover(Tablero t,int xposterior, int yposterior) {
boolean resultado=false;
Alfil[] tabAlfil=t.getAlfil();
for (int i=0; i<tabAlfil.length; i++){
if (Math.abs(xposterior-tabAlfil[i].getX())==Math.abs(yposterior-tabAlfil[i].getY())){
if ((i<=4)&&(t.enRango(xposterior,yposterior)==true)&&(t.hayFigura(xposterior,yposterior)==false)){
System.out.println("movimiento permitido.Se va a proceder a mover el alfil...");
resultado=true;
}
else{
System.out.println("movimiento no permitido");
resultado=false;
}
}
}
return resultado;
}
/**Metodo que muestra por pantalla la posicion del alfil*/
public void mostrar(){
System.out.println("Alfil en ("+getX()+", "+getY()+")");
}
}
public class Casilla{
/**Atributo de color negro*/
public static final char NEGRO ='N';
/**Atributo de color blanco*/
public static final char BLANCO ='B';
/**Atributo que guarda el color*/
private char color;
/**Constructor de la clase Casilla.
*@param c Color a asignar*/
public Casilla(char c){
color=c;
}
/**Metodo para obtener el color de un objeto Casilla
*@return El color asignado a dicha casilla*/
public char getColor(){
return color;
}
/**Metodo para asignar un color a una casilla
*@param c El nuevo color a asignar.*/
public void setColor(char c){
color=c;
}
/**Metodo que comprueba si dos casillas son iguales
*@param c El color de la casilla a comparar
*@return Devuelve la comprobacion.*/
public boolean iguales(Casilla c){
if(getColor()==c.getColor())
return true;
else
return false;
}
}
public class Tablero{
/** Atributo que representa el tablero.*/
private Casilla tablero[][];
/** Atributo que guarda los alfiles. */
private Alfil tabAlfil[];
/** Constructor de la clase tablero
*@param Dimension que va a tener el tablero al crearse. */
public Tablero(int dimension){
tablero=new Casilla [dimension][dimension];
tabAlfil=new Alfil [4];
for(int i=0; i<tablero.length;i++){
for(int j=0; j<tablero[i].length;j++){
if((i+j)%2 == 0) tablero[i][j]=new Casilla('B');
else tablero[i][j]=new Casilla('N');
}
}
}
/**Metodo para obtener el array de tablero desde un objeto creado de la clase Tablero.
@return El array de tablero. */
public Casilla[][] getTablero(){
return tablero;
}
/**Metodo para obtener el array de alfiles.
*@return Devuelve el array de alfiles.*/
public Alfil[] getAlfil(){
return tabAlfil;
}
/**Metodo para mostrar el tablero.*/
public void mostrar(){
for (int i=0; i<tablero.length;i++){
for(int j=0;j<tablero[i].length;j++){
if (hayFigura(i+1,j+1)) System.out.print ("("+tablero[i][j].getColor()+")"+"\t");
else System.out.print(tablero[i][j].getColor()+"\t");
}
System.out.println(" ");
}
for (int i=0; i<tabAlfil.length;i++){
tabAlfil[i].mostrar();
}
}
/**Metodo que inserta un alfil en el tablero.
*@param num El indice del alfil a insertar
*@param posX Indica la posicion a insertar en el eje X.
*@param posY Indica la posicion a insertar en el eje Y.
*@return Devuelve un booleano indicando si se puede insertar en la posicion */
public boolean insertarAlfil(int num, int posX, int posY){
if(enRango(posX, posY)){
tabAlfil[aFilasArray(num)]=new Alfil(posX, posY);
return true;
}
else
return false;
}
/**Metodo que devuelve si hay una figura en una posicion
*@param xp Posicion en el eje X.
*@param xy Posicion en el eje Y.
*@return Indica si se ha podido mover o no.*/
public boolean hayFigura(int xp, int xy){
boolean resultado=false;
int i=0;
do{
if(tabAlfil[i].getX()==xp && tabAlfil[i].getY()==xy) resultado=true;
else resultado=false;
i++;
}
while(resultado=false | i<tabAlfil.length);
return resultado;
}
/** Metodo que comprueba si las posiciones indicadas estan dentro de los limites del tablero.
*@param posX Posicion en el eje X.
*@param posY Posicion en el eje Y.
*@return Indica si se las posiciones indicadas estan dentro de los limites.*/
public boolean enRango(int posX, int posY){
if (tablero.length <aColumnasArray(posX) | tablero.length<aFilasArray(posY))
return false;
else
return true;
}
/**Metodo para mover a un alfil de posicion
*@param numFigura Indice de la figura
*@param xPosterior Nueva coordenada X a mover el alfil
*@param yPosterior Nueva coordenada Y a mover el alfil
*@return Devuelve un booleano para saber si ha podido mover el alfil */
public boolean moverAlfil(int numFigura, int xPosterior, int yPosterior){
boolean resultado=false;
if(enRango(xPosterior, yPosterior)){
tabAlfil[aColumnasArray(numFigura)].setX(xPosterior);
tabAlfil[aColumnasArray(numFigura)].setY(yPosterior);
resultado=true;
}
else resultado=false;
return resultado;
}
/**Metodo que transforma las coordenadas del usuario a coordenadas del array.
*@param casillaY Casilla a transformar
*@return La casilla en la posicion del array. */
private int aFilasArray(int casillaY){
return casillaY-1;
}
/**Metodo que transforma las coordenadas del usuario a coordenadas del array.
*@param casillaX Casilla a transformar
*@return La casilla en la posicion del array. */
private int aColumnasArray(int casillaX){
return casillaX-1;
}
}
/**Clase que prueba el funcionamiento del Tablero*/
public class PruebaTablero{
public static void main(String args[]){
if (args.length != 1) {
System.out.println("Uso: java PruebaTablero <dimension>");
}
else {
int dimension = Integer.parseInt(args[0]);
Tablero tablero = new Tablero(dimension);
if (tablero.insertarAlfil(1,1,1))
System.out.println("Alfil 1 colocado");
if (tablero.insertarAlfil(2,1,dimension))
System.out.println("Alfil 2 colocado");
if (tablero.insertarAlfil(3,dimension,1))
System.out.println("Alfil 3 colocado");
if (tablero.insertarAlfil(4,dimension,dimension))
System.out.println("Alfil 4 colocado");
tablero.mostrar();
System.out.println(tablero.hayFigura(1,1));
System.out.println(tablero.hayFigura(5,5));
System.out.println(tablero.hayFigura(1,1));
System.out.println(tablero.hayFigura(1,5));
System.out.println(tablero.hayFigura(1,1));
System.out.println(tablero.hayFigura(5,1));
if (tablero.moverAlfil(1, 2,2)) {
System.out.println("Movimiento correcto");
tablero.mostrar();
}
else {
System.out.println("Movimiento incorrecto");
}
if (tablero.moverAlfil(2, 1, 1)) {
System.out.println("Movimiento correcto");
tablero.mostrar();
}
else {
System.out.println("Movimiento incorrecto");
}
if (tablero.moverAlfil(1, 1,1)) {
System.out.println("Movimiento correcto");
tablero.mostrar();
}
else {
System.out.println("Movimiento incorrecto");
}
if (tablero.moverAlfil(1, 1,1)) {
System.out.println("Movimiento correcto");
tablero.mostrar();
tablero.mostrar();
}
else {
System.out.println("Movimiento incorrecto");
}
System.out.println(tablero.hayFigura(1,1));
System.out.println(tablero.hayFigura(5,5));
}
}
}
[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]Donato escribió:[i][i][i][i][i][i][i][i][i][i]
Problemas:
1º El hayFigura de la clase Tablero no funciona bien segun lo probado en la clase PruebaTablero. Me dice siempre que false (he usado un while para evitar eso ya que con un for no puedo)
2º En el metodo moverAlfil de la clase Tablero tengo que comprobar que en la diagonal no haya ninguna figura para poder mover el alfil. No se como hacerlo la verdad, se como hacer para comprobar que el movmiento es diagonal pero no para ver si hay figuras de por medio.
A ver si a alguien se le ilumina la cabeza! Gracias chicos.
daniel_5 escribió:[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]Donato escribió:[i][i][i][i][i][i][i][i][i][i]
Problemas:
1º El hayFigura de la clase Tablero no funciona bien segun lo probado en la clase PruebaTablero. Me dice siempre que false (he usado un while para evitar eso ya que con un for no puedo)
2º En el metodo moverAlfil de la clase Tablero tengo que comprobar que en la diagonal no haya ninguna figura para poder mover el alfil. No se como hacerlo la verdad, se como hacer para comprobar que el movmiento es diagonal pero no para ver si hay figuras de por medio.
A ver si a alguien se le ilumina la cabeza! Gracias chicos.
Tanta i tanta j tanto xp y tanto yp te vas a hacer un lio yo primeramente nombraría las variable socn nombres mas representativos .
As imple vista y si no me equivoco el método hayFigura te muestra is el array tabAlfil está ocupado no??, por que no haces simplemente una comparación con null dela posicion que le pasas?? en vez de recorrer todo el array ves a la posicion que le pasas el método tabAlfil[i].getX()y tabAlfil[i].getY() ¿Que hacen?
Un consejo si creas métodos para obtener variables, no las pongas como public luego esas variables hazlas privadas
public boolean hayFigura(int xp, int xy){
boolean resultado=false;
int i=0;
do{
if(tabAlfil[i].getX()==xp && tabAlfil[i].getY()==xy) resultado=true;
else resultado=false;
i++;
}
while(resultado==false | i<tabAlfil.length);
return resultado;
}
carlos@carlos-pc-linux:~/documentos/facultad/1º/Programacion/Practicas Prog I/P6$ java PruebaTablero 5
Alfil 1 colocado
Alfil 2 colocado
Alfil 3 colocado
Alfil 4 colocado
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Tablero.hayFigura(Tablero.java:78)
at Tablero.mostrar(Tablero.java:44)
at PruebaTablero.main(PruebaTablero.java:18)
daniel_5 escribió:Vale a ver si me aclaro getX devuelve X de la clase Alfil ¿no?
Entonces no entiendo esto [font=arial,helvetica,sans-serif][size=100]tabAlfil[i].getX() tu debes comparar dos coordenadas con el array del alfiles ¿no? pues compáralso directamente algo asi if tabAlfil[i]==xp en vez de asi iftabAlfil[i].getX()==xp[/size][/font]
Donato escribió:a ver si me ayudais porque me estoy volviendo loco de verdad, llevo una semana y no hay manera...
public boolean hayFigura(int xp, int xy) {
boolean resultado = false;
int i = 0;
do {
if(tabAlfil[i].getX() == xp && tabAlfil[i].getY() == xy)
resultado = true;
else
resultado = false;
i++;
} while(resultado == false | i < tabAlfil.length);
return resultado;
}
public boolean hayFigura(int xp, int xy) {
if (xp < tablero.length && xy < tablero[xp].length)
return tablero[xp][yp] != null;
else
LANZAR EXCEPCIO
}
public class Casilla{
private char color;
private Figura figura; <-----------
public Casilla(char c){
color = c;
figura = null; <----------
}
[...]
}
xgc1986 escribió:public boolean hayFigura(int xp, int xy) {
boolean resultado = false;
int i = 0;
do {
if(tabAlfil[i].getX() == xp && tabAlfil[i].getY() == xy)
resultado = true;
else
resultado = false;
i++;
} while(resultado == false | i < tabAlfil.length);
return resultado;
}
Una sugerencia, porque no haces que cada casilla apunte a una figura, automaticamente de esta manera sabes si hay alguna ficha en esa casilla y ademas que figura es, en vez de tener coste (n) como en tu caso, tendras coste 1 bastante mejor, y el codigo de esta funcion seriapublic boolean hayFigura(int xp, int xy) {
if (xp < tablero.length && xy < tablero[xp].length)
return tablero[xp][yp] != null;
else
LANZAR EXCEPCIO
}
y si no quieres lanzar excepcion comprueba las coordenadas antes de llamar a la funcion
habria que modificar la clase casillapublic class Casilla{
private char color;
private Figura figura; <-----------
public Casilla(char c){
color = c;
figura = null; <----------
}
[...]
}
faltarian añadir los nuevos setters y getters, y la de mover/eliminar Figura
Alfil seria un hijo de Figura igual que las demas fichas. Si solo utilizas alfiles quita figura y pon alfil directamente
oscarmu escribió:Pues nada, chicos. Hoy me ha llegado el Core Java v1 y v2 de Amazon UK.
Lo pedí a las librerias de Lleida pero me decian que estaba descatalogado. Como ya lo habia empezado con fotocopias en ingles me decidí a comprarlo por Amazon UK. Lo pedi el dia 16 i me ha llegado hoy, dia 22. Total, 4 dias habiles.
Ya que estaba puesto, y como me salia bastante mejor de precio que en españa. Decidi comprar el volumen 1 i volumen 2. La suma de los dos libros me ha salido al mismo precio que uno solo en España.
Bueno, si necesitas que os aclare alguna cosa del libro...solo teneis que pedirlo!
Coolpix escribió:oscarmu escribió:Pues nada, chicos. Hoy me ha llegado el Core Java v1 y v2 de Amazon UK.
Lo pedí a las librerias de Lleida pero me decian que estaba descatalogado. Como ya lo habia empezado con fotocopias en ingles me decidí a comprarlo por Amazon UK. Lo pedi el dia 16 i me ha llegado hoy, dia 22. Total, 4 dias habiles.
Ya que estaba puesto, y como me salia bastante mejor de precio que en españa. Decidi comprar el volumen 1 i volumen 2. La suma de los dos libros me ha salido al mismo precio que uno solo en España.
Bueno, si necesitas que os aclare alguna cosa del libro...solo teneis que pedirlo!
Estos dos?
http://www.amazon.co.uk/Core-Java-Funda ... 511&sr=8-4
http://www.amazon.co.uk/Core-Java-Advan ... pd_sim_b_1
viejozorro escribió:Hola buenas. Acabo de descubrir este post de java y me gusta la verdad. Hace 2 años que aprendí Java y la verdad es que es un lenguaje que me encanta, y que hace algún tiempo que tengo algo abandonado y que pronto recuperaré.
Leí la primera página y de las APIS que vi, creo que os falta poner JBuilder que es de pago pero creo que de las que he provado la mejor; y también poderíais poner BlueJ, que es una API muy sencilla, intuitiva y simple, pero que funciona perfectamente para esa gente que está empezando y solo le interesa compliar y punto.
Nada mas, un saludo.
daniel_5 escribió:
Un pequeño apunte JBuilder y BlueJ son IDEs no APIs
Coolpix escribió:oscarmu escribió:Pues nada, chicos. Hoy me ha llegado el Core Java v1 y v2 de Amazon UK.
Lo pedí a las librerias de Lleida pero me decian que estaba descatalogado. Como ya lo habia empezado con fotocopias en ingles me decidí a comprarlo por Amazon UK. Lo pedi el dia 16 i me ha llegado hoy, dia 22. Total, 4 dias habiles.
Ya que estaba puesto, y como me salia bastante mejor de precio que en españa. Decidi comprar el volumen 1 i volumen 2. La suma de los dos libros me ha salido al mismo precio que uno solo en España.
Bueno, si necesitas que os aclare alguna cosa del libro...solo teneis que pedirlo!
Estos dos?
http://www.amazon.co.uk/Core-Java-Funda ... 511&sr=8-4
http://www.amazon.co.uk/Core-Java-Advan ... pd_sim_b_1
zaius5 escribió:Como se puedo haecr referencia al un determinado elemento de un vector? estoy provando con loquesea=Vector[numero] pero me dice que eso es para un array no para un vector ,que debo hacer??
Fox escribió:http://java.sun.com/javase/6/docs/api/