Llamada a métodos

Hola soy un poco nuevo en esto de java y tengo un problema al intentar invocar un método desde la clase main. Me sale un error de "non-static variable this cannot be referenced from a static context". Mi código es el siguiente:
package Hormigueros;
import java.io.*;
public class Main {
public class Hormiguero
{
 private Comida[] comida= new Comida[1];
 private Peligro[] peligro= new Peligro[1];
 private Reina[] reina=new Reina[1];
 private Soldado[] soldado= new Soldado[20];
 private Obrera[] obrera= new Obrera[20];
 private void inicializar_hormiguero()
 {
    reina[0].nombre="Reina";
    reina[0].salud=10;
    for (int i=0; i<20; i++){
        soldado.nombre=Integer.toString(i);
        soldado.salud=10;
        obrera.nombre=Integer.toString(i);
        obrera.salud=10;
    }
    peligro[0].salud=0;
    peligro[0].coordenadas=0;
    comida[0].cantidad=10;
    comida[0].coordenadas[1][5]=true;
    System.out.println("Hormiguero inicializado");
 }
public static void main (String args[]){
 Tablero tablero=new Tablero(); <----- Aqui me da el error y bueno en la siguiente tb
 tablero.inicializar_tablero();
 try{
 System.out.println("¿Que desea hacer?");
 System.out.println(" 1.- Aumentar familia. ");
 System.out.println(" 2.- Comer. ");
 System.out.println(" 3.- Defender hormiguero. ");
 System.out.println(" 4.- Recolectar comida. ");
 System.out.println(" 5.- Indicar peligro. ");
 System.out.println(" 6.- Defender. ");
 System.out.println(" 7.- Atacar. ");
 System.out.println(" 8.- Salir. ");
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 String línea = br.readLine();
 }catch(Exception e){
     System.out.println("Error en la E/S");
     System.exit(0);
 }
}
¿Me podrían decir como llamar a los métodos de esa clase? Gracias por adelantado.

1 respuesta

Respuesta
1
Para que te funcione:
1) Debes de tener definida una clase Tablero
2) Dicha clase debe tener un constructor público, es decir, algo así como:
public Tablero(){
}
3) La clase tablero tiene que estar en el mismo paquete que la clase Main, o bien importar el paquete donde se encuentre la clase Tablero.
Más cosas: creo que tienes un error en las primeras líneas. No me queda claro si la clase se llama Main u Hormiguero. ¿Qué nombre tiene el fichero?
Si me aclaras mis dudas, te podré ayudar mejor.
Hola
Lo siento por haber puesto parte del código que no era lo que tenia que ponerte, lo que pasa que no me cabía el código entero, aquí tienes el código de tablero:
public class Tablero{
        protected objetos[][] tamano= new objetos[5][5];
        private   int coordenadas_comida;
        private   int coordenadas_hormiguero;
        private   int coordenadas_peligro;
        private void actualizar_comida(){
        }
        private void actualizar_peligro(){
        }
        private void inicializar_tablero(){
            tamano[1][1].hormiguero=true;
            tamano[1][3].peligro=true;
            tamano[1][5].comida=true;
            tamano[1][5].CANTIDAD=10;
            tamano[2][3].comida=true;
            tamano[2][3].CANTIDAD=10;
            tamano[3][1].comida=true;
            tamano[3][1].CANTIDAD=10;
            tamano[3][2].peligro=true;
            tamano[3][4].peligro=true;
            tamano[4][3].comida=true;
            tamano[4][3].CANTIDAD=10;
            tamano[5][2].peligro=true;
            tamano[5][5].comida=true;
            tamano[5][5].CANTIDAD=10;
            System.out.println("Tablero inicializado");
        }
    }
Esta clase esta dentro del main, pero lo del main lo hizo el netbeans. El fichero según he visto se llama main.java. Y mi problema es que al usar los métodos de las clases me sale el error anteriormente comentado.
Gracias
Mi consejo: renombra el paquete a hormigueros, con minúscula, para seguir la nomenclatura estándar Java. Lo segundo: créate tres clases Java independientes, cada una en su fichero, con el mismo nombre que la clase, es decir:
Main.java
Tablero.java
Hormiguero.java
y dentro de cada una, su código. Por ejemplo, para Tablero.java
package hormigueros;
public class Tablero{ 
        protected objetos[][] tamano= new objetos[5][5]; 
        private   int coordenadas_comida; 
        private   int coordenadas_hormiguero; 
        private   int coordenadas_peligro; 



<span style="white-space: pre;"> </span>public Tablero(){
inicializar_tablero();

<span style="white-space: pre;"> </span>}

        private void actualizar_comida(){ 
        } 
        private void actualizar_peligro(){ 
        } 
        private void inicializar_tablero(){ 
            tamano[1][1].hormiguero=true; 
            tamano[1][3].peligro=true; 
            tamano[1][5].comida=true; 
            tamano[1][5].CANTIDAD=10; 
            tamano[2][3].comida=true; 
            tamano[2][3].CANTIDAD=10; 
            tamano[3][1].comida=true; 
            tamano[3][1].CANTIDAD=10; 
            tamano[3][2].peligro=true; 
            tamano[3][4].peligro=true; 
            tamano[4][3].comida=true; 
            tamano[4][3].CANTIDAD=10; 
            tamano[5][2].peligro=true; 
            tamano[5][5].comida=true; 
            tamano[5][5].CANTIDAD=10; 
            System.out.println("Tablero inicializado"); 
        } 
}

La clase Main es la única que deberá tener el método public static void main(String[] args). Usa esta clase como lanzadora de la aplicación.
Sigue los pasos que te recomiendo, y si algo no te funciona o tienes dudas me lo dices y te echo una mano. Ánimo:
Carlos.
Muchas gracias ya va andando esto xD, una ultima pregunta, y es que al iniciar el programa me salta al catch sin usar el método o me sale esto si pongo el método antes del try:
Exception in thread "main" java.lang.NullPointerException
        at hormigueros.Tablero.inicializar_tablero(Tablero.java:26)
        at hormigueros.Main.main(Main.java:19)
Java Result: 1
El codigo se quedo asi:
package hormigueros;
import java.io.*;
public class Main {
    public static void main(String[] args) {
        try{
            Tablero tablero= new Tablero();
            tablero.inicializar_tablero();
            System.out.println("¿Que desea hacer?");
            System.out.println(" 1.- Aumentar familia. ");
            System.out.println(" 2.- Comer. ");
            System.out.println(" 3.- Defender hormiguero. ");
            System.out.println(" 4.- Recolectar comida. ");
            System.out.println(" 5.- Indicar peligro. ");
            System.out.println(" 6.- Defender. ");
            System.out.println(" 7.- Atacar. ");
            System.out.println(" 8.- Salir. ");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String línea = br.readLine();
        }catch(Exception e){
            System.out.println("Error en la E/S"); <----- Va aqui siempre y nose pq
            System.exit(0);
        }
    }
}
La clase tablero esta puesta bien y el código es el que tenias antes.
Muchas gracias por todo
Lanza tu app en modo debug. Te está petando dentro de la clase Tablero, al inicializar el tablero, concretamente lo que tengas en la línea 26.
Por cierto: metí una llamada a inicializarTablero() en el constructor del Tablero() por lo que no tienes que volver a llamarlo fuera.
Otra cosa: ¿Tienes definida la clase objetos que usas en Tablero?
Hola otra vez:
Si la tengo creada:
public class Objetos {
        public boolean peligro;
        public boolean hormiguero;
        public boolean comida;
        public int cantidad;
}
tamano[1][1].hormiguero=true; <--- es aqui donde me da fallo y no se pq es
En cuanto a lo del constructor también me da fallo si lo pongo así porque tiene el fallo este, al igual que me da fallo en inicializar hormiguero en la linea:
private Obrera[] obrera= new Obrera[20];
y tengo la clase obrera declarada:
public class Obrera {
        public String nombre=new String("");
        public int   salud;
        public int[] comida= new int[2];
        public int[][] coordenadas_peligro= new int[5][5];
        public int buscar_comida(){
            return 0;
        }
        public int buscar_peligro(){
            return 0;
        }
        public void actualizar_peligro(){
        }
        public void llevar_comida(){
        }
        public void actualizar_salud(){
        }
}
Lo hice en modo debug y me salta otra vez con el mismo error. Lo siento si estoy abusando de ti. Gracias de verdad
Ok. El problema lo tienes en que al crear el array de Objetos por ejemplo, defines por decirlo de alguna forma la "rejilla" donde se van a ubicar tus objetos de la clase Objeto, pero no estás llenando la rejilla de Objetos, es decir, que la rejilla está vacía. Cuando inicialices la rejilla tendrías que hacer algo así:
private void inicializar_tablero(){
for (int ix1=0; ix1<5; ix1++){
for (int ix2=0; ix2<5; ix2++){
tamano[ix1][ix2] = new Objetos();
}

}
tamano[1][1].hormiguero=true;  
tamano[1][3].peligro=true;  
tamano[1][5].comida=true;  
tamano[1][5].CANTIDAD=10;  
tamano[2][3].comida=true;  
tamano[2][3].CANTIDAD=10;  
tamano[3][1].comida=true;  
tamano[3][1].CANTIDAD=10;  
tamano[3][2].peligro=true;  
tamano[3][4].peligro=true;  
tamano[4][3].comida=true;  
tamano[4][3].CANTIDAD=10;  
tamano[5][2].peligro=true;  
tamano[5][5].comida=true;  
tamano[5][5].CANTIDAD=10;  
System.out.println("Tablero inicializado");

}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas