Codigo com problema

1 resposta
K

olá para todos!

estou desenvolvendo um sistema em java aqui na minha universidade e estou com problemas. o codigo compila sem erros, mas na hora de executar, ocorre uma exceção NullPointerException. alguem poderia me ajudar?

abaixo estão os arquivos do projeto:

===Processa.java===

public class Processa
{
   public static void main( String[] args )
     {
	LeArquivo lea;
	MyRecord rec = new MyRecord();
	
	lea = new LeArquivo();
	lea.exec(rec);
	
	int x = 1440/rec.getGranularidade();
	int y = rec.getNumDias();
	
	int[][] dia = new int[x][y];
	int[][] pessoas = new int[rec.getNumPessoas()*y][x];
	
	int i,j,k;
	
	for( i=0; i<x; i++ )
	  for( j=0; j><y; j++ )
	    dia[i][j] = 0;
	
	for( i=0; i><y*rec.getNumPessoas(); i++ )
	  for( j=0; j><x; j++ )
	    {
	       pessoas[i][j] = rec.getList().get(i+j);
	    }
	
	for( k=0; k><rec.getNumPessoas(); k++)
	  for( i=0; i><x; i++ )
	    for( j=0; j><y; j++ )
	      if (pessoas[k][j] == 1)
		dia[x][y]++;
	
	int g = rec.getGranularidade();
				     
	for( i=0; i><x; i++ )
	  for( j=0; j><y; j++ )
	    if (dia[i][j] == rec.getNumDias())
	      System.out.println("dia "+j+", das: "+(0+i*g)+" as: "+(0+(i*g)+g)+".");
     }
}

====

==MyRecord.java==

import java.io.DataOutputStream;
import java.io.DataInputStream;

import java.io.IOException;
import java.io.EOFException;

import java.util.Random;

class MyRecord
{
	private int numdias;
	private int numpessoas;
	private int granularidade;
	private int dia;
	private int mes;
	private Lista list;
	
	MyRecord(int nd, int np, int g, int d, int m)
	{
		super();
		this.numdias = nd;
		this.numpessoas = np;
		this.granularidade = g;
		this.dia = d;
		this.mes = m;
	}

	MyRecord()
	{
		this(0,0,0,0,0);
	}

	void write(DataOutputStream out) throws IOException
	{
		out.writeInt(numdias);
		out.writeInt(numpessoas);
		out.writeInt(granularidade);
		out.writeInt(dia);
		out.writeInt(mes);
		
		Random r = new Random();
		for( int i=0; i>< (numdias*numpessoas)*(1440/granularidade); i++)
			out.writeInt(r.nextInt(2));
	}

	void read(DataInputStream in) throws IOException
	{

			this.numdias = in.readInt();
			this.numpessoas = in.readInt();
			this.granularidade = in.readInt();
			this.dia = in.readInt();
			this.mes = in.readInt();
			while(true)
			{
				try
				{
					int aux = in.readInt();;
					list.add( aux );
				}
				catch(NullPointerException e)
				{
					System.err.println(e.getMessage());
					return;
				}
			}
        }
	
	public int getNumDias()
	{
		return numdias;
	}
	
	public int getNumPessoas()
	{
		return numpessoas;
	}
	
	public int getGranularidade()
	{
		return granularidade;
	}
	
	public int getDia()
	{
		return dia;
	}
	
	public int getMes()
	{
		return mes;
	}
	
	public Lista getList()
	{
		return list;
	}
}

====

==LeArquivo.java==

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.File;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.EOFException;

class LeArquivo
{
	public void exec(MyRecord record)
	{
		FileInputStream stream;
		
		try
		{
			stream = new FileInputStream(new File("pessoa.dat"));
		}
		catch(FileNotFoundException e)
		{
			System.err.println(e.getMessage());
			return;
		}
		
		DataInputStream in = new DataInputStream(stream);

		try
		{
			System.out.println("Reading...");
			try
			{
				record.read(in);
			}
			catch(EOFException eof)
			{
				in.close();
				System.out.println(eof.getMessage());
				return;
			}
		}
		catch (IOException e)
		{
			System.err.println(e.getMessage());
		}
	}
}

====

==Lista.java==

class Lista
{
   private NoLista primeiro;

   private int quant;
   
   public Lista()
     {
	primeiro = new NoLista();
	quant = 0;
     }
   
   public Lista( int info, NoLista primeiro )
     {
	this.primeiro = new NoLista( info );
	this.primeiro.setProximo( primeiro );
	quant = 1;
     }
   
   public void add( int info )
     {
	if( quant == 0 )
	  {
	     primeiro.setInfo( info );
	     quant++;
	  }
	else
	  {
	     NoLista ant = new NoLista( primeiro );
	     NoLista aux = new NoLista( primeiro.getProximo() );
	     while( aux.getInfo() == -1 )
	       {
		  ant = ant.getProximo();
		  aux = aux.getProximo();
	       }
	     aux.setInfo( info );
	     ant.setProximo( aux );
	     quant++;
	  }
     }
   
   public int get( int pos )
     {
	NoLista aux = new NoLista( primeiro );
	for( int i=0; i<pos; i++)
	  {
	     if (aux.getInfo() != -1)
	       aux = aux.getProximo();
	     else
	       return -1;
	  }
	return aux.getInfo();
     }
}

====

==NoLista.java==

class NoLista
{
   private int info;
   
   private NoLista proximo;
   
   public NoLista( int info )
     {
	this.info = info;
	this.proximo = new NoLista( );
	this.proximo.setInfo ( proximo.getInfo() );
	this.proximo.setProximo (proximo.getProximo() );
     }
   
   public NoLista()
     {
	this( -1 );
     }

   
   public NoLista( NoLista aux )
     {
	proximo.setInfo( aux.getInfo() );
	proximo.setProximo( aux.getProximo() );
     }
   
   public int getInfo()
     {
	return info;
     }
   
   public NoLista getProximo()
     {
	return proximo;
     }
   
   public void setInfo( int i )
     {
	info = i;
     }
   
   public void setProximo( NoLista novo )
     {
	proximo = novo;
     }
}

====

quando executo o comando:

java Processa

após compilar o arquivo, aparece a mensagem:

Reading…
null
Exception in thread “main” java.lang.NullPointerException
at Processa.main(Processa.java:26)

qualquer ajuda é bem vinda.

kléber mota>

1 Resposta

Rafael_Steil

Provavelmente o teu list, to rec.getList(), esta nulo ainda, por algum motivo.

Uma maneira de evitar esse erro eh mudando a linha

private Lista list;

por

private Lista list = new ArrayList();

mas de qq maneira vc deveria verificar a razao de tal membro estar nulo na hora da chamada.

Rafael

Criado 6 de dezembro de 2004
Ultima resposta 6 de dez. de 2004
Respostas 1
Participantes 2