Duvida POO

15 respostas
M

Sou novato na área e esse é meu primeiro tópico e seguinte, peço humildemente que me ajudem com um problema em que me meti, entretanto não faço ideia do que fazer pra soluciona-lo.

Seguinte, dei inicio ao meus estudos de POO e fiquei preso num seguinte algoritmo de cadastro, segue o código:

package br.ucsal;

import java.util.Scanner;

class Jogo {
	int codigo;
	String nome;
	double valor;
}

public class Poo1 {

	public static void jogos() {
		Scanner sc = new Scanner(System.in);

		System.out.println("Quantos jogos deseja cadastrar? ");
		int quantidade = new Scanner(System.in).nextInt();

		Jogo cadastrojogos[] = new Jogo [quantidade*3];
		int x = 3 * quantidade, i = 0;

		do {
			System.out.println("Informe o codigo do jogo "+i+1+": ");
			cadastrojogos[i].codigo = sc.nextInt();
			i++;

			System.out.println("Informe o nome do jogo "+i+1+": ");
			cadastrojogos[i].nome = sc.next();
			i++;

			System.out.println("Informe o valor do jogo "+i+1+": ");
			cadastrojogos[i].valor = sc.nextDouble();
			i++;
			x++;
		} while(i < x);
	}
	
	public static void main(String[] args) {
		jogos();
	}
	
	public static void escrever(Jogo[] cadastrojogos) {
		int i = 0;
		
		System.out.println(cadastrojogos[i].codigo);
		i++;
		
		System.out.println(cadastrojogos[i].nome);
		i++;
		
		System.out.println(cadastrojogos[i].valor);
		i++;
	}
}

O que acontece é que meio que “estoura” o vetor quando eu tento alocar o valor no array “cadastrojogos”, porém não consigo identificar o porquê. Visto que “respeita” o tamanho da array.
Deu pra entender? O erro acontece quando passa o valor pedido ao usuário pra cadastrojogos[].

Valeu desde já!

ps: por hora, ignorem o metódo de imprimir, ainda nao trabalhei em cima dele.

15 Respostas

Jonathan_Medeiros

Faça o incremento do array uma única vez dentro laço!

M

fiz, porém se manteve dando erro. Logo no 1 input (o informe o codigo do jogo) ele da erro em runtime.

Lucas_Camara

Manda ai o stacktrace da exceção que está estourando.

M

Desculpa, mas de stacktrace mal ouvi falar… Não sei como usar isso, afinal sou novato. Perdão

Lucas_Camara

Tranqulo. O stacktrace é o erro que estoura no console da IDE que estiver usando. É algo parecido com isso:

M

Screenshot_1

isso talvez?

staroski

Não.

Edite seu método main para ficar assim:

public static void main(String[] args) {
	try {
	    jogos();
	} catch (Throwable t) {
	    t.printStackTrace();
	}
}
M

Mike

cadastrojogos[i] esta nulo
Você criou o vetor Jogo, só que agora falta inicializar cada obj do vetor através do new (como de costume)

M

No caso, cada um dos objetos (código, nome e valor) também precisam ser inicializados?
Estou a alterar isso

Mike

O objeto sim
O seu objeto é: cadastrojogos[i]

Para instanciar um objeto Jogo(sem ser vetor), vc faria assim:

Jogo meuObj = new Jogo();

Como é um vetor, você terá que passar a posição a ser instanciada

M

Desculpa, cada um dos atributos do objeto Jogo*

M

Entendi!! Valeu, Mike!
Vou tirar esse resto de manhã para aprender isso, obrigado!

M

Mas na verdade, esse vetor de objetos não era o que eu realmente queria então.
Foi uma ideia que tive, porém errônea.
Porque na verdade, eu queria criar um sistema de cadastro… como se fosse uma locadora ou algo do tipo.
Aí tipo, quis que os atributos ocupassem o lugar dos objetos na array de objeto, deu pra entender?

Acho que, na verdade, quem deveriam ser vetores seriam os atributos.

edit: código finalizado e funcionando

Lucas_Camara

Só uma observação. quando for colocar código para a galera aqui ajudar, evite mandar imagens. Posta o código formatado.

Criado 12 de julho de 2018
Ultima resposta 13 de jul. de 2018
Respostas 15
Participantes 5