Problemas com NullPointerException em Arquivos

5 respostas
I

Olá Pessoal,

Bom, espero que alguém aqui possa me ajudar, pois meu tempo é curto. :lol:

Bom, vamos lá:
To trabalhando num projetinho de Engenharia de software para a faculdade mas to preso nessa parte que mensionei no título. O Projeto é o seguinte, preciso utilizar arquivo (serializable) para gerenciar um hotel. Já fiz a parte de cadastro de clientes e apartamentos, porém estou preso no controle de contas. Ainda estou aprendendo java e por isso ainda não consegui sair do lugar e o projeto deve ser entregue na segunda feira.
Bom, sem ficar falando muito vou direto ao ponto, tirando alguns erros no cadastro e ao excluir, esse problema não me deixa concluir o projeto. Alguém poderia me ajudar por favor?

O projeto está no seguinte link:
http://d.turboupload.com/d/2137428/Hotel_Serrano.zip.html

Vlw ae pessoal, muito obrigado mesmo. Até mais.

5 Respostas

Thiago_Kverna

se você colocar o código aqui fica mais fácil pra te responderem…

nem todo mundo tem tempo pra baixar e ficar olhando onde está o erro em um projeto inteiro…

coloque o codigo da parte que está com erro. :wink:

I

Tudo bem, posso até colocar o local onde está o erro sim, porém acho que será dificil por aí alguém achar o erro desta forma sabe.
Acho q se a pessoa rodasse o programa acharia o erro bem facil.

Mas de qualquer forma, segue a classe que está dando o erro:

//Gerencia o fechamento da conta do cliente
public class ControleDeConta{
	
	Scanner input = new Scanner(System.in);
	Cliente cliente = new Cliente();
	Apartamento apartamento = new Apartamento();
	Vector<Cliente> vetorCliente = new Vector<Cliente>();
	Vector<Apartamento> vetorApartamento = new Vector<Apartamento>();
	Arquivo arquivo = new Arquivo();
	static Menu view = new Menu();

	//Método que controla a entrada do cliente no apartamento
	public void entrarApartamento(){
		
		String cliente = null;
		String numeroApartamento = null;
		String dataEntrada = null;
		String dataSaida = null;
		int posCliente = -1;
		int posApartamento = -1;
		int auxCliente = 0;
		int auxApartamento = 0;
		
		System.out.println("Digite o nome do cliente: ");
		cliente = input.next();
		System.out.println("Digite o numero do Apartamento solicitado: ");
		numeroApartamento = input.next();
		System.out.println("Digite a data de entrada no Apartamento: [DD/MM/AAAA]");
		dataEntrada = input.next();
		System.out.println("Digite a data de saída do Apartamento: [DD/MM/AAAA]");
		dataSaida = input.next();

		arquivo.varreArquivoCliente();
		vetorCliente = arquivo.getVectorCliente();

		for(Cliente client: vetorCliente){
			
			posCliente++;
			
			if(client.getNome().equals(cliente)){
				
				auxCliente++;
				
				arquivo.varreArquivoApartamento();
				vetorApartamento = arquivo.getVectorApartamento();

				for(Apartamento ap: vetorApartamento){
					
					posApartamento++;
					
					if(ap.getNumeroApartamento().equals(numeroApartamento)){
						
						auxApartamento++;
						
                                                       


                                                                                                // O ERRO OCORRE AQUI
						if(ap.getStatusApartamento().equals("Indisponivel")){
							
							System.out.println("Apartamento Indisponível no momento.");
							System.out.println("Indisponível até: "+ ap.getDataSaida());
							System.out.println("");
						}
						if(ap.getStatusApartamento().equals("Reservado")){
							
							if(ap.getDataReserva()!= null){
								
								System.out.println("Apartamento Reservado");
							}
							else
							{
								System.out.println("Digite a data para a reserva: ");
								String dataReserva = input.next();
								ap.setDataReserva(dataReserva);
								System.out.println("A diária do Apartamento é de: " + ap.getPreco()+ "Reais");

								arquivo.excluirNoVetorApartamento(posApartamento);
								arquivo.salvaNoVetor(ap);
								arquivo.salvaArquivoAp();
								
								System.out.println("Apartamento reservado.");
							}
						}
						
						if(ap.getStatusApartamento().equals("Disponível")){
							
							ap.setDataEntrada(dataEntrada);
							System.out.println("A diária do Apartamento é de: " + ap.getPreco()+ "Reais");
							ap.setStatusApartamento("Indisponivel");
							ap.setDataSaida(dataSaida);

							arquivo.excluirNoVetorApartamento(posApartamento);
							arquivo.salvaNoVetor(ap);
							arquivo.salvaArquivoAp();
							
							System.out.println("Apartamento liberado");
						}
					}
				}
				if(auxApartamento==0)
					System.out.println("Não foi possível encontrar o apartamento.");
			}
		}
		if(auxCliente==0)
			System.out.println("Não foi possível encontrar o cliente.");
	}

	//Método responsável por reservar o apartamento
	public void reservarApartamento(){
		
		String nome = null;
		String numeroApartamento = null;
		String dataReserva = null;
		String dataEntrega = null;
		int posCliente = -1;
		int posApartamento = -1;
		int auxCliente = 0;
		int auxApartamento = 0;
		Menu view = new Menu();
		
		System.out.println("Digite o nome do cliente: ");
		nome = input.next();
		System.out.println("Digite o numero do Apartamento solicitado: ");
		numeroApartamento = input.next();
		System.out.println("Digite a data inicial da estadia: [DD/MM/AAAA]");
		dataReserva = input.next();
		System.out.println("Digite a data final da estadia: [DD/MM/AAAA]");
		dataEntrega = input.next();

		arquivo.varreArquivoCliente();
		vetorCliente = arquivo.getVectorCliente();

		for(Cliente client: vetorCliente){
			
			posCliente++;
			if(client.getNome().equals(nome)){
				
				auxCliente++;
				
				arquivo.varreArquivoApartamento();
				vetorApartamento = arquivo.getVectorApartamento();

				for(Apartamento ap: vetorApartamento){
					
					posApartamento++;
					if(ap.getNumeroApartamento().equals(numeroApartamento)){
						
						auxApartamento++;





                                                                                                // O ERRO OCORRE AQUI
						if(ap.getStatusApartamento().equals("Indisponivel")){
							
							System.out.println("Apartamento reservado até: " + ap.getDataSaida());
							System.out.println("Reservar apartamento? [s/n] ");
							String op= input.next();
							
							if(op=="s"){
								
								System.out.println("Data da reserva: [DD/MM/AAAA]");
								dataReserva = input.next();
								
								if(ap.getDataReserva()!= null){
									
									System.out.println("Este apartamento não pode ser reservado");
								}
								else{
									
								ap.setDataReserva(dataReserva);

								arquivo.excluirNoVetorApartamento(posApartamento);
								arquivo.salvaNoVetor(ap);
								arquivo.salvaArquivoAp();
								
								System.out.println("Apartamento reservado.");
								view.menu();
								
								}
							}
						}
						
						if(ap.getStatusApartamento().equals("Reservado")){
							
							System.out.println("Apartamento Indisponível no momento.");
							view.menu();
						}
						if(ap.getStatusApartamento().equals("Disponível")){
							
							System.out.println("Digite a data da reserva: [DD/MM/AAAA]");
							dataReserva = input.next();
							
							if(ap.getDataReserva()!=null){
								
								System.out.println("Não foi possível reservar o apartamento.");
							}
							else
							{
								ap.setDataReserva(dataReserva);

								arquivo.excluirNoVetorApartamento(posApartamento);
								arquivo.salvaNoVetor(ap);
								arquivo.salvaArquivoAp();
								System.out.println("Apartamento Reservado");
								view.menu();
							}
						}
					}
				}
				if(auxApartamento==0)
					System.out.println("Não foi possivel encontrar o apartamento");
			}
		}
		if(auxCliente==0)
			System.out.println("Não foi possivel encontrar o cliente");
	}

	//Verifica de o apartamento está disponível
	public void disponivelApartamento(){
		
		String numeroApartamento = null;
		System.out.println("Digite o numero do apartamento: ");
		numeroApartamento = input.next();

		arquivo.varreArquivoApartamento();
		vetorApartamento = arquivo.getVectorApartamento();
		
		int aux=0;

		for(Apartamento ap: vetorApartamento){
			
			if(ap.getNumeroApartamento().equals(numeroApartamento)){
				
				aux++;
				System.out.println("Numero do Apartamento: "+ ap.getNumeroApartamento());
				System.out.println("Status: "+ ap.getStatusApartamento());
				
				if(ap.getDataReserva()!= null){
					
					System.out.println("Possui uma reserva para: "+ap.getDataReserva());
				}
			}
		}
		
		if(aux==0){
			
			System.out.println("Apartamento não encontrado!");
			System.out.println();
		}
	}
	
	//cancela reserva de apartamento
	public void cancelarReserva(){
		
		String numeroApartamento = null;
		
		System.out.println("Digite o numero do apartamento:");
		numeroApartamento = input.next();

		arquivo.varreArquivoApartamento();
		vetorApartamento = arquivo.getVectorApartamento();
		
		int pos = -1;

		for(Apartamento ap: vetorApartamento){
			
			pos++;

			if(ap.getNumeroApartamento().equals(numeroApartamento)){
				
				ap.setDataReserva(null);
				arquivo.excluirNoVetorApartamento(pos);
				arquivo.salvaNoVetor(ap);
				arquivo.salvaArquivoAp();
				view.menu();
			}
		}
		
		System.out.println("Não foi possível cancelar a reserva.");
		view.menu();
	}
	
	//Calcula a conta do cliente
	public void  quitarDebito(){

		String numeroApartamento = null;
		int nDias = 0;
		int posApartamento = -1;
		int auxApartamento = 0;
		String dia = null,mes = null,ano = null;
		String diaA = null,mesA = null,anoA = null;
		int da = 0,dm = 0,dd = 0;
		double valorPagar = 0;
		
		System.out.println("..:: Controle de caixa do Hotel Serrano ::.. ");
		System.out.println("Digite o numero do apartamento: ");
		numeroApartamento = input.next();
		System.out.println("Informe a data de hoje: [DD/MM/AAAA] ");
		String dataHoje = input.next();
		
		String[] auxHoje = dataHoje.split("/");

		Integer convert = new Integer(10);

		arquivo.varreArquivoApartamento();
		vetorApartamento = arquivo.getVectorApartamento();

		for(Apartamento ap: vetorApartamento){
			
			posApartamento++;
			if(ap.getNumeroApartamento().equals(numeroApartamento)){
				
				auxApartamento++;
				String testa = ap.getDataEntrada();
				String[] auxEntrega = testa.split("/");

				int flag = 0;
				
				//verifica data de hoje e de quando o cliente saiu do apartamento
				for(String valor:auxHoje){
					
					if(flag == 0)
						dia = valor;
					if(flag == 1);
						mes = valor;
					if(flag == 2)
						ano = valor;
					flag++;
				}
				flag = 0;
				
				for(String valor: auxEntrega){
					
					if(flag == 0)
						diaA = valor;
					if(flag == 1);
						mesA = valor;
					if(flag == 2)
						anoA = valor;
					flag++;
				}
				
				//calcula quantos dias o apartamento ficou com o cliente
				if(ano!=anoA){
					
					convert = Integer.parseInt(ano)-Integer.parseInt(anoA);
					da=convert;
					nDias = 365*da;
				}
				
				if(mes!=mesA){
					
					convert= Integer.parseInt(mes)-Integer.parseInt(mesA);
					dm=convert;
					nDias = nDias+(dm*30);
				}
				
				if(dia!=diaA){
					
					convert = Integer.parseInt(dia)- Integer.parseInt(diaA);
					dd=convert;
					nDias=nDias+(Math.abs(dd));
				}
				
				valorPagar = (nDias*ap.getPreco());

				System.out.println("Total: R$ "+valorPagar);

				ap.setDataEntrada(null);
				ap.setDataSaida(null);
				ap.setStatusApartamento("Disponível");

				arquivo.excluirNoVetorApartamento(posApartamento);
				arquivo.salvaNoVetor(ap);
				arquivo.salvaArquivoAp();

			}
		}
	}
}
Ataxexe

E o erro? Coloque o stacktrace para nós.

Arrisco dizer que ap.getStatusApartamento() == null

Coloque a constante primeiro na expressão, como por exemplo:

"Indisponivel".equals(ap.getStatusApartamento())
I

Opa galera, esqueci mesmo. Mas tá ae. Qualquer coisa vc vão me pedindo ok???

Flw ae pessoal.

Exception in thread "main" java.lang.NullPointerException at control.ControleDeConta.entrarApartamento(ControleDeConta.java:64) at view.Menu.menu(Menu.java:202) at control.Main.main(Main.java:13)

H

Você está utilizando alguma IDE, se estiver usando uma IDE tente debugar linha-a-linha para saber o que esta acontecendo.

Não adianta as pessoas te ajudarem a achar o erro mais simples de resolver em Java.

NullPointerException é um erro que você mais ver na sua vida de Programador Java.

Não estou querendo levantar polêmica aqui, e apenas a minha opinião.

Criado 8 de novembro de 2007
Ultima resposta 9 de nov. de 2007
Respostas 5
Participantes 4