Preciso de ajuda em um codigo em Java

12 respostas
logicasintaxejavaerror
D

Sou novo aqui então desde já peço desculpas qualquer coisa.
Situação:
Meu professor passou um trabalho onde crio um programa para criar 3 eventos esportivos. o programa deve conter 3 classes(Evento[armazena], PanArray[gerencia], InterEvento[recebe informações do user]). Meu proble, no momento, é so este: preciso exibir as informações de um dos 3 eventos(o que o usuario escolher), mas ao criar os 3 eventos, ou digitar um codigo que não existe, acaba dando um erro. Gostaria de saber como resolver.

Programa:
package EventoPack;

public class Evento {

private static int cod = 0;
private String titulo;
private String local;
private String data;
private String hora;
private int status;
private int quantLugares, lugaresVend;
private double valIngresso;
private static final double VALOR_DEFAULT_INGRESSO = 100;
private static final int CAPACIDADE_DEFAULT = 3000;
private int loc;

// Metodo construtor
public Evento(String titulo, String local, String data, String hora, int status, int quantLugares, int lugaresVend,
		double valIngresso, int loc) {
	cod++;
	this.titulo = titulo;
	this.local = local;
	this.data = data;
	this.hora = hora;
	this.status = status;
	this.quantLugares = quantLugares;
	this.lugaresVend = lugaresVend;
	this.valIngresso = valIngresso;
	this.loc = loc;

}

public Evento(String titulo, String local, String data, String hora, int status, int lugaresVend,  int loc) {
	cod++;
	this.titulo = titulo;
	this.local = local;
	this.data = data;
	this.hora = hora;
	this.status = status;
	this.quantLugares = CAPACIDADE_DEFAULT;
	this.lugaresVend = lugaresVend;
	this.valIngresso = VALOR_DEFAULT_INGRESSO;
	this.loc = loc;

}


// Metodo construtor default(padrão)
public Evento() {
	cod++;
	this.titulo = null;
	this.local = null;
	this.data = null;
	this.hora = null;
	this.status = 0;
	this.quantLugares = 0;
	this.lugaresVend = 0;
	this.valIngresso = 0;
	this.loc = 0;

}

// Metodos get e set
public int getLoc() {
	return loc;
}
public int getCodigo() {
	return cod;
}

public void setCodigo(int codigo) {
	cod = codigo;
}

public String getTitulo() {

	return this.titulo;
}

public void setTitulo(String titulo) {
	this.titulo = titulo;
}

public String getLocal() {
	return this.local;
}

public void setLocal(String local) {
	this.local = local;
}

public String getData() {
	return this.data;
}

public void setData(String data) {
	this.data = data;
}

public String getHora() {
	return this.hora;
}

public void setHora(String hora) {
	this.hora = hora;
}

public int getStatus() {
	return this.status;
}

public void setStatus(int status) {
	this.status = status;

}

// Metodos que modificam os status do evento
public void iniciarVendas() {
	this.status = 1;
}

public void encerrarVendas() {
	this.status = 2;
}

public void cancelarEvent() {
	this.status = 3;
}

public void marcOcorrido() {
	this.status = 4;
}

public int getQuantLugares() {
	return this.quantLugares;
}

public void setQuantLugares(int quantLugares) {
	this.quantLugares = quantLugares;
}

public int getLugaresVend() {
	return this.lugaresVend;
}

public void setLugaresVend(int lugaresVend) {
	this.lugaresVend = lugaresVend;
}

public double getValIngresso() {
	return this.valIngresso;
}

public void setValIngresso(double valIngresso) {
	this.valIngresso = valIngresso;
}

// Metodo para a venda de ingressos
public void vendas(int vendidos) {
	if ((this.quantLugares - vendidos) < 0) {
		System.out.println("Não temos essa quantidade de ingressos diponíveis");
	}
	if ((this.quantLugares - vendidos) >= 0) {
		this.lugaresVend += vendidos;
		this.quantLugares -= vendidos;
		System.out.println("Compra efetuada com sucesso!!!");
	}
}

public void vendas() {
	if ((this.quantLugares - VALOR_DEFAULT_INGRESSO) < 0) {
		System.out.println("Não temos essa quantidade de ingressos diponíveis");
	}
	if ((this.quantLugares - VALOR_DEFAULT_INGRESSO) >= 0) {
		this.lugaresVend += VALOR_DEFAULT_INGRESSO;
		this.quantLugares -= VALOR_DEFAULT_INGRESSO;
		System.out.println("Compra efetuada com sucesso!!!");
	}
}

}

package EventoPack;

public class PanArray {

private String titulo, local, data, hora;
private int codigo, status, quantLugares, lugaresVend;
private double valIngresso;
private int loc;
Evento event[] = new Evento[3];

public PanArray(String titulo, String local, String data, String hora, int status, int quantLugares,
		double valIngresso, int loc) {
	this.codigo = 0;
	this.titulo = titulo;
	this.local = local;
	this.data = data;
	this.hora = hora;
	this.status = status;
	this.quantLugares = quantLugares;
	this.lugaresVend = 0;
	this.valIngresso = valIngresso;
	this.loc = loc;

}

public PanArray(String titulo, String local, String data, String hora, int status, int loc) {
	this.codigo = 0;
	this.titulo = titulo;
	this.local = local;
	this.data = data;
	this.hora = hora;
	this.status = status;
	this.lugaresVend = 0;
	this.loc = loc;

}

public PanArray() {
	this.codigo = 0;
	this.titulo = null;
	this.local = null;
	this.data = null;
	this.hora = null;
	this.status = 0;
	this.lugaresVend = 0;
	this.loc = 0;

}

public int getCodd() {
	return event[loc - 1].getCodigo();
}

public void setCodd(int codd) {
	this.codigo = codd;
}

public int getPosicao() {
	return event[loc - 1].getLoc();
}

public void setPosis(int locx) {
	loc = locx;
}

public String getTitulo() {
	return titulo;
}

public void setTitulo(String titulo) {
	this.titulo = titulo;
}

public String getLocal() {
	return local;
}

public void setLocal(String local) {
	this.local = local;
}

public String getData() {
	return data;
}

public void setData(String data) {
	this.data = data;
}

public String getHora() {
	return hora;
}

public void setHora(String hora) {
	this.hora = hora;
}

public int getStatus() {
	return status;
}

public void setStatus(int status) {
	this.status = status;
}

public int getQuantLugares() {
	return quantLugares;
}

public void setQuantLugares(int quantLugares) {
	this.quantLugares = quantLugares;
}

public int getLugaresVend() {
	return lugaresVend;
}

public void setLugaresVend(int lugaresVend) {
	this.lugaresVend = lugaresVend;
}

public double getValIngresso() {
	return valIngresso;
}

public void setValIngresso(double valIngresso) {
	this.valIngresso = valIngresso;
}

public int getLoc() {
	return loc;
}

public void setLoc(int loc) {
	this.loc = loc;
}

public void evenDefault() {
	for (int i = 0; i < event.length; i++) {
		event[i] = new Evento();
	}
}

public void eventoMenor() {
	if (event[loc - 1] != null) {
		System.out.println("Já possui um evento neste espaço, por favor escolha outro!!!");
	} else {
		event[loc - 1] = new Evento(titulo, local, data, hora, status, lugaresVend, loc);
	}
}

public void criarEvent() {
	if (event[loc - 1] == null) {
		event[loc - 1] = new Evento(titulo, local, data, hora, status, quantLugares, lugaresVend, valIngresso, loc);
	} else {
		System.out.println("Já possui um evento neste espaço, por favor escolha outro!!!");
	}
	System.out.println("Codigo do seu evento: " + event[loc - 1].getCodigo());
}

public void exib() {
	if (event[loc - 1].getStatus() != 0) {
		if (event[0].getCodigo() == this.codigo) {
			System.out.println("===========================================================");
			System.out.println("Codigo do evento: " + event[0].getCodigo());
			System.out.println("Titulo do evento: " + event[0].getTitulo());
			System.out.println("Local do evento: " + event[0].getLocal());
			System.out.println("Data do evento: " + event[0].getData());
			System.out.println("Hora do evento: " + event[0].getHora());
			System.out.println("Status do evento: " + event[0].getStatus());
			System.out.println("Capacidade do evento: " + event[0].getQuantLugares());
			System.out.println("Valor do ingresso do evento: " + event[0].getValIngresso());
			System.out.println("Lugares vendidos até agora: " + event[0].getLugaresVend());
			System.out.println("===========================================================");
		}  
		if (event[1].getCodigo() == codigo) {
			System.out.println("===========================================================");
			System.out.println("Codigo do evento: " + event[1].getCodigo());
			System.out.println("Titulo do evento: " + event[1].getTitulo());
			System.out.println("Local do evento: " + event[1].getLocal());
			System.out.println("Data do evento: " + event[1].getData());
			System.out.println("Hora do evento: " + event[1].getHora());
			System.out.println("Status do evento: " + event[1].getStatus());
			System.out.println("Capacidade do evento: " + event[1].getQuantLugares());
			System.out.println("Valor do ingresso do evento: " + event[1].getValIngresso());
			System.out.println("Lugares vendidos até agora: " + event[1].getLugaresVend());
			System.out.println("===========================================================");
		}  
		if (event[2].getCodigo() == codigo) {
			System.out.println("===========================================================");
			System.out.println("Codigo do evento: " + event[2].getCodigo());
			System.out.println("Titulo do evento: " + event[2].getTitulo());
			System.out.println("Local do evento: " + event[2].getLocal());
			System.out.println("Data do evento: " + event[2].getData());
			System.out.println("Hora do evento: " + event[2].getHora());
			System.out.println("Status do evento: " + event[2].getStatus());
			System.out.println("Capacidade do evento: " + event[2].getQuantLugares());
			System.out.println("Valor do ingresso do evento: " + event[2].getValIngresso());
			System.out.println("Lugares vendidos até agora: " + event[2].getLugaresVend());
			System.out.println("===========================================================");
		} else if (codigo != event[0].getCodigo() || codigo != event[1].getCodigo()
				|| codigo != event[2].getCodigo()) {
			System.out.println("Não há eventos com esse código!!!");
		}

	} else {
		System.out.println("Não evento disponíveis!");
	}
}

}

package EventoPack;

import java.util.Scanner;

public class InterEvento {

public static void main(String[] args) {
	Scanner a = new Scanner(System.in);
	PanArray eve = new PanArray();

	String titulo, local, data, hora;
	int status, quantLugares, lugaresVend;
	double valIngresso;
	int loc;
	boolean geren = true;
	
	eve.evenDefault();
	do {
		System.out.println("=============================GERENCIAMENTO=============================");
		System.out.println("1. Cadastrar um Evento");
		System.out.println("2. Remover um Evento.");
		System.out.println("3. Consultar os dados de um determinado evento.");
		System.out.println("4. Iniciar a venda de ingressos para um determinado evento.");
		System.out.println("5. Encerrar a venda de ingressos para um determinado evento.");
		System.out.println("6. Cancelar um determinado evento.");
		System.out.println("7. Marcar um determinado evento como já ocorrido.");
		System.out.println("8. Consultar a quantidade de lugares livres para um determinado evento.");
		System.out.println("9. Vender ingresso de um determinado evento.");
		System.out.println("10. Vender ingresso de um evento com quantidade de ingressos default.");
		System.out.println("11. Listar os dados de todos os eventos.");
		System.out.println("12. Sair do programa.");
		System.out.println("========================================================================");
		int opc = a.nextInt();
		switch (opc) {
		case 1: {
			System.out.println("Em que espaço deseja guardar seu evento?[1, 2 ou 3]");
			loc = a.nextInt();
			System.out.println("Insira o titulo do evento:");
			titulo = a.next();
			System.out.println("Insira o local do evento");
			local = a.next();
			System.out.println("Insira a data do evento");
			data = a.next();
			System.out.println("Insira a hora em que o evento ocorrerá");
			hora = a.next();
			System.out.println("Deseja inserir o PREÇO e a CAPACIDADE do evento?[1 - sim/2 - não]");
			opc = a.nextInt();
			switch (opc) {
			case 1: {
				System.out.println("Insira o preço do ingresso:");
				valIngresso = a.nextDouble();
				System.out.println("Inisra a capacidade do local:");
				quantLugares = a.nextInt();
				System.out.println("Sua venda de ingressos começará como DESATIVADA.[Status = 2]");
				status = 2;
				eve = new PanArray(titulo, local, data, hora, status, quantLugares, valIngresso, loc);
				eve.criarEvent();
				
				
				break;
			}
			case 2: {

			}
			default: {
				System.out.println("ERRO!!!");
			}

			}
				
			break;
		}
		case 2: {

		}
		case 3: {
			System.out.println("Inisra o CODIGO do evento desejado:");
			int codd = a.nextInt();
			eve.setCodd(codd);
			eve.exib();	
			break;
			}
		
		case 4: {

		}
		case 5: {

		}
		case 6: {

		}
		case 7: {

		}
		case 8: {

		}
		case 9: {

		}
		case 10: {

		}
		case 11: {

		}
		case 12: {
			geren = false;
		}
		}
	} while (geren);
}

}

12 Respostas

S

Poderia postar o erro que aparece?

D
Exception in thread main java.lang.ArrayIndexOutOfBoundsException: -1

at EventoPack.PanArray.exib(PanArray.java:162)

at EventoPack.InterEvento.main(InterEvento.java:80)
S

Você está querendo imprimir mais coisas do que tem na lista, revise ela que deve resolver o erro.

wldomiciano

No método exib() da classe PanArray, a primeira linha está assim:

if (event[loc - 1].getStatus() != 0) {

Se o valor de loc for zero, então vc estará tentando acessar a posição -1 do array e isso é o que está lançando a exceção ArrayIndexOutOfBoundsException. Como sabemos, arrays começam em 0.

D

Bem, nessa parte eu quero dizer que, se o status do vetor que está naquela posição for zero, e não a posição do vetor, como posso concertar isso?

wldomiciano

Há espaço para várias melhorias, mas a principio, acredito que se vc remover esse if resolve.

Deixe apenas os ifs que estão dentro dele. Ficaria algo assim:

public void exib() {
      if (event[0].getCodigo() == this.codigo) {
        /* imprime evento */
      }

      if (event[1].getCodigo() == codigo) {
        /* imprime evento */
      }

      if (event[2].getCodigo() == codigo) {
          /* imprime evento */
      }

      /* resto do código */
}
D

Obrigado, assim que puder modifica-lo, atualizo aqui

D

Bom, um erro foi resolvido, porem agora, depois de listar os dados de um evento existente aparece outro erro:

Exception in thread main java.lang.NullPointerException

at EventoPack.PanArray.exib(PanArray.java:175)

at EventoPack.InterEvento.main(InterEvento.java:80)
wldomiciano

Tenta assim:

public void exib() {
      if (event[0] != null && event[0].getCodigo() == this.codigo) {
        /* imprime evento */
      }

      if (event[1] != null && event[1].getCodigo() == codigo) {
        /* imprime evento */
      }

      if (event[2] != null && event[2].getCodigo() == codigo) {
          /* imprime evento */
      }

      /* resto do código */
}
D

Funcionou, obrigado!
Por ultimo, poderia dar uma analisada no codigo e ver como posso fazer para o usuario não criar um evento em um espaço do vetor que já possui um evento?

wldomiciano

No método main, quando vc pede pro usuario informar o espaço em que vai ser guardado o evento, vc checa pra ver se este espaço já não tá ocupado. Acredito que vc vai ter que criar um método na classe PanArray pra conseguir isso.

D

ok!

Criado 14 de abril de 2018
Ultima resposta 15 de abr. de 2018
Respostas 12
Participantes 3