Java - Consulta Xlint

 
Vista:

Consulta Xlint

Publicado por Fernando (26 intervenciones) el 26/03/2007 01:27:15
Cuando compilo (solo compilo) en el NetBeans y en el JCreator me sale el siguiente mensaje:

Note: juegolp2.java uses unchecked or unsafe operations.
Recompile with -Xlint:unchecked for details.

Que quiere decir eso???

El codigo es el siguiente:

import java.util.Random;
import java.util.ArrayList;
//import java.lang;

class Celda{
char tipo;
public void setCelda(char tipo){this.tipo=tipo;}
public char getTipo(){return this.tipo;}
}

class JuegoLP2{
Laberinto laberinto_actual;
public static void main(String [] args){
GestorLaberinto glab= new GestorLaberinto();
Random rand= new Random();
int M= rand.nextInt(20)+20;
int N= rand.nextInt(20)+20;
Laberinto lab;
lab= glab.Crear(M,N);
Dibujador dib;
dib= new Dibujador();
//El espacio a dibujar será como mínimo de 5 celdas
int A= rand.nextInt(11)+5;
int B= rand.nextInt(11)+5;
dib.Dibuja(lab,A,B);
}
}

/*Se esta trabajando con una matriz MxN,en donde solo se considera
'A','F','D'. La matriz 2*M+1 X 2*N+1, en donde se considerara
la presencia de 'P'*/
class Laberinto{
int M;
int N;
Celda [][] Lab;
float pct_monstruo;
int[] niveles_mostruo;
float pct_artefacto;
int [] niveles_artefacto;
public int getM(){return this.M;}
public int getN(){return this.N;}
public void setM(int M){this.M=M;}
public void setN(int N){this.N=N;}
public void setP_M(float val){this.pct_monstruo=val;}
public void setP_A(float val){this.pct_artefacto=val;}
public void setLab(int i,int j,char tipo){
Lab[i][j].setCelda(tipo);
}

public boolean celdaValida(int coord_x,int coord_y){
//se esta trabajando sobre la matriz original MxN
return ((coord_x >= 0 || coord_x < M) &&
(coord_y >= 0 || coord_y < N));
//este metodo podria recibir un parametro que indique el tipo
//de celda que tambien deseo validar que posea
}
}

class GestorLaberinto{

public Laberinto asignaMemoria(int M, int N){
Laberinto Lb;
//se le da memoria a Lb
Lb = new Laberinto();
//damos la memoria correspondiente para formar la matriz
final int m = M;
final int n = N;
Lb.Lab=new Celda[m][];
for (int i=0;i<Lb.Lab.length;i++)
Lb.Lab[i]=new Celda[n];
return Lb;
}


public void asignaValor(Laberinto Lb,int coord_x,int coord_y,
char tipo,ArrayList arr){
if ((Lb.celdaValida(coord_x,coord_y)) &&
(Lb.Lab[coord_x][coord_y].getTipo() != 'D'))
{
Lb.setLab(2*coord_x+1,2*coord_y+1,tipo);
if (tipo=='F')
arr.add(new Integer ((coord_x*(Lb.getM())+coord_y)));
}
}

public boolean creaCamino(Laberinto Lb,int pos_x1,int pos_y1,
int pos_x2,int pos_y2){
if ((Lb.celdaValida(pos_x2,pos_y2)) &&
(Lb.Lab[pos_x2][pos_y2].getTipo() == 'D'))
{
Lb.setLab(pos_x1+pos_x2+1,pos_y1+pos_y2+1,'D');
return true;
}
return false;
}

public Laberinto Crear(int M,int N){
Laberinto Lb= this.asignaMemoria(2*M+1,2*N+1);
//inicializamos cada elemento del laberinto(valido) como AFUERA(1)
//o como PARED(0) segun corresponda
int i,j;
for (i=0;i<Lb.Lab.length;i++){
for (j=0;j<Lb.Lab[i].length;j++){
if (i==0 || i==(2*M) || j==0 || j==(2*N))
Lb.setLab(i,j,'P'); //ponemos PARED
else
Lb.setLab(i,j,'A');//ponemos AFUERA
}
}
//creamos el arreglo(lista) que va a contener las celdas que sean
// de tipo FRONTERA
ArrayList arr;
arr = new ArrayList();
//escogemos la primera celda al azar para hacerla ADENTRO(2)
Random rand;
rand=new Random();
int coord_x=rand.nextInt(M);
int coord_y=rand.nextInt(N);
//convertimos la celda obtenida a DENTRO
asignaValor(Lb,2*coord_x+1,2*coord_y+1,'D',arr);
//convertimos todas sus celdas adyacentes a FRONTERA(3)
//si corresponde y las agregamos a la lista respectiva
asignaValor(Lb,coord_x-1,coord_y,'F',arr);
asignaValor(Lb,coord_x+1,coord_y,'F',arr);
asignaValor(Lb,coord_x,coord_y-1,'F',arr);
asignaValor(Lb,coord_x,coord_y+1,'F',arr);
//Aqui empieza el bucle principal
while (arr.size()>0) {
//pos va a ser la posicion del arreglo de FRONTERAS
int pos=rand.nextInt(arr.size());
int elem=(Integer)arr.get(pos);
int pos_x= elem/M;
int pos_y= elem%M;
asignaValor(Lb,pos_x,pos_y,'D',arr);
arr.remove(pos);//quitemos el elemento del arreglo FRONTERAS
//convierto a FRONTERAS sus celdas adyacentes, si corresponde
asignaValor(Lb,pos_x-1,pos_y,'F',arr);
asignaValor(Lb,pos_x+1,pos_y,'F',arr);
asignaValor(Lb,pos_x,pos_y-1,'F',arr);
asignaValor(Lb,pos_x,pos_y+1,'F',arr);
//creamos la union entre el camino principal y el nuevo DENTRO
if (!creaCamino(Lb,pos_x,pos_y,pos_x-1,pos_y))
if (!creaCamino(Lb,pos_x,pos_y,pos_x+1,pos_y))
if (!creaCamino(Lb,pos_x,pos_y,pos_x,pos_y-1))
creaCamino(Lb,pos_x,pos_y,pos_x,pos_y+1);
}
//Creamos las celdas anterior y siguiente
while (true){
int xrand= rand.nextInt(2*M+1);
int yrand= rand.nextInt(2*N+1);
if (Lb.Lab[xrand][yrand].getTipo()=='D'){
Lb.setLab(xrand,yrand,'+');
break;}
}
while (true){
int xrand= rand.nextInt(2*M+1);
int yrand= rand.nextInt(2*N+1);
char auxtipo=Lb.Lab[xrand][yrand].getTipo();
if (auxtipo=='D' && auxtipo!='+'){
Lb.setLab(xrand,yrand,'-');
break;}
}
return Lb;
}
}

class Dibujador{
int A;
int B;
public void Dibuja(Laberinto Lb,int x,int y){
int iniciox= x-A;
int inicioy= y-B;
for (int i=iniciox; i<=x+A; i++){
for (int j=inicioy; j<=y+B; j++){
if (!Lb.celdaValida(i,j))
System.out.print(' ');
else {
char auxtipo= Lb.Lab[i][j].getTipo();
switch (auxtipo){
case 'P':System.out.print('#');break;
case 'D':System.out.print(' ');break;
case 'A':System.out.print('#');break;
case 'M':System.out.print('M');break;
case 'R':System.out.print('A');break;
case '+':System.out.print('+');break;
case '-':System.out.print('-');break;
case 'J':System.out.print('J');break;
}
}
}
System.out.println();
}
}
}

Cuando ejecuto el programa, obtengo el siguiente mensaje:

Exception in thread "main" java.lang.NullPointerException
at Laberinto.setLab(JuegoLP2.java:48)
at GestorLaberinto.Crear(JuegoLP2.java:107)
at JuegoLP2.main(JuegoLP2.java:20)

Obviamente, el programa no muestra nada.
El objetivo del programa es crear un laberinto(para ello esta la clase GestorLaberinto) y mostrar ciertas partes de el (la clase Dibujador se encarga de eso).
Respondan lo mas pronto posible POR FAVOR!!!, es URGENTE!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta Xlint

Publicado por angel (537 intervenciones) el 26/03/2007 09:17:27
"unchecked or unsafe operations" creo k viens significando que tienes operaciones en tu codigo que el compilador no puede comprobar y que pueden producir errores en tiempo de ejecución.

y el error que t da al ejecutar "java.lang.NullPointerException" es por que tienes un valor nulo delante de un punto. Es decir tndras algun objeto del que quieres usar algun metodo que tiene como valor null , quizas no lo hayas inicializado.
Creo que es en esta funcion..
public void setLab(int i,int j,char tipo){
Lab[i][j].setCelda(tipo); //Aki esta l nul..
}

Comprueba que inicializas el array antes de usarlo.

Un saludo..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar