Duvida POO

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.

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

1 curtida

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

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

1 curtida

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

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

1 curtida

Screenshot_1

isso talvez?

Não.

Edite seu método main para ficar assim:

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

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)

2 curtidas

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

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

1 curtida

Desculpa, cada um dos atributos do objeto Jogo*

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

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

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

3 curtidas