[Dúvida] Array Objeto

3 respostas
mauraoemau

Olá pessoal mais uma vez estou aqui com as minhas duvidas sobre Array fiz um código de cadastro, que cadastro em um Array so que para mostrar ele mostra valor "null" o que eu estou fazendo de errado.

Menu.java
import java.io.*;

public class Menu {

    public static void main(String[] args)throws IOException{
        //Buffer
        BufferedReader entra = new BufferedReader(new InputStreamReader(System.in));
        
        //Atributos
        int op = 0;
        int cont =0;
        
        //Vetor
        Metodos[] met = new Metodos[10];
        
        do{
            System.out.println("(1) - Adicionar");
            System.out.println("(2) - Visualizar");
            System.out.println("(3) - Sair");
            
            System.out.println("\nDigite a opção desejada:");
            op = Integer.parseInt(entra.readLine());
            
            switch(op){
                case 1:
                for(int i=0;i<1;i++){
                    Metodos obj = new Metodos();
                    met[i] = new Metodos();
                    obj.Entrada();
                }
                break;
                
                case 2:
                for(int i=0;i<1;i++){
                    Metodos obj = new Metodos();
                    met[i] = new Metodos();
                    obj.Mostra();
                }
                break;
                
                default:
                break;
            }
            
        }while(op != 3);
    }
}
Metodos.java
import java.io.*;

public class Metodos {

    //Atributos
    public String Nome;
    
    //Metodos SET e GET
    public void setNome(String nome){
        this.Nome = nome;
    }
    
    public String getNome(){
        return this.Nome;
    }
    
    //Metodo de Entrada
    public void Entrada()throws IOException{
        //Buffer
        BufferedReader entra = new BufferedReader(new InputStreamReader(System.in));
        
        //Perguntas
        System.out.println("Entre com o nome:");
        this.setNome(entra.readLine());
    }
    
    //Metodo de Mostra
    public void Mostra(){
        //Mostra
        System.out.println("O nome e:" +this.getNome());
    }
}

3 Respostas

ViniGodoy

Na opção 2, você deveria apenas listar os métodos já criados. No entando, você está criando um novo Metodos (veja, existe um new ali).

O correto é obter o objeto de dentro do array:

for(int i=0;i<1;i++){ Metodos obj = met[i]; //Pegamos o objeto de dentro do array obj.Mostra(); //E mostramos ele. }

eberson_oliveira

Experimenta fazer algo assim:

import java.io.*;

public class Menu {

    public static void main(String[] args)throws IOException{
        //Buffer
        BufferedReader entra = new BufferedReader(new InputStreamReader(System.in));
        
        //Atributos
        int op = 0;
        int cont =0;
        
        //Vetor
        Metodos[] met = new Metodos[10];
        
        do{
            System.out.println("(1) - Adicionar");
            System.out.println("(2) - Visualizar");
            System.out.println("(3) - Sair");
            
            System.out.println("\nDigite a opção desejada:");
            op = Integer.parseInt(entra.readLine());
            
            switch(op){
                case 1:
                    if ( cont >= met.length ){
                       System.out.println( "todas as posições já foram ocupadas" );
                       break;
                    }
                    Metodos obj = new Metodos();                    
                    obj.Entrada();
                    met[cont++] = obj;
                break;
                
                case 2:
                for(int i=0;i<met.length;i++){
                    Metodos obj = met[i];
                    
                    if ( obj != null ) 
                       obj.Mostra();
                }
                break;
                
                default:
                break;
            }
            
        }while(op != 3);
    }
}

Não cheguei a testar mas acho q deve estar funcionando…

[]s

M
Ou assim:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Menu01 {

	public static void main(String[] args) throws IOException {
		// Buffer
		BufferedReader entra = new BufferedReader(new InputStreamReader(
				System.in));

		// Atributos
		int op = 0;
		int cont = 0;
		int i = 0;
		Metodos obj;
		
		// Vetor
		Metodos[] met = new Metodos[10];

		do {
			System.out.println("(1) - Adicionar");
			System.out.println("(2) - Visualizar");
			System.out.println("(3) - Sair");

			System.out.println("\nDigite a opção desejada:");
			op = Integer.parseInt(entra.readLine());

			switch (op) {
			case 1:
				if (i < met.length){
					obj = new Metodos();
					met[i++] = obj;
					obj.entrada();
				}else{
					System.out.println("Posicoes esgotadas, escolha 2 ou 3");
				}
				break;

			case 2:
				for (int j = 0; j < met.length; j++) {
					obj = met[j]; //Pegamos o objeto de dentro do array
					if (obj != null) obj.mostra();
				}
				break;

			case 3:
				System.exit(0);
				
			default:
				break;
			}

		} while (i <= met.length);
	}
}

class Metodos {

	// Atributos
	private String nome;

	// Metodos SET e GET
	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return this.nome;
	}

	// Metodo de Entrada
	public void entrada() throws IOException {
		BufferedReader entra = new BufferedReader(new InputStreamReader(
				System.in));

		System.out.println("Entre com o nome: ");
		this.setNome(entra.readLine());
	}

	// Metodo de Mostra
	public void mostra() {
		System.out.println("O nome e: " + this.getNome());
	}
}
Boa sorte!
Criado 6 de abril de 2010
Ultima resposta 6 de abr. de 2010
Respostas 3
Participantes 4