Ajuda instância de objetos

11 respostas
oitempao

Eae galera, de boa?

Bom faz algum tempo que não posto no fórum por falta de tempo, pois estou na cadeira de algoritmos do meu curso, que já está acabando, aí começarei a postar :smiley:

Então, meu problema é o seguinte: meu professor deu um exercício para cadastra 4 usuários em um vetor de objetos. Até aí tudo bem, meu problema é na instanciação da classe.

Eu tenho 3 classes, a Principal(com o main), a Cadastrar (com os getters e setters) e a Opcao1(que é onde eu populo o vetor).
Porém quando crio um objeto da classe Principal no main (Principal principal = new Principal():wink: eu não consigo utilizar qualquer variável na classe Opcao1 (por exemplo a variável cont, eu tento atraves do principal.cont; e não funciona).

Bom, espero ter sido bem claro, qualquer coisa eu posto o código para uma clareza mais ampla.

Obrigado pela atenção :smiley:

11 Respostas

ribclauport

Poste o codigo.

oitempao

Ok, aqui estão as 3 classes:

Principal
import java.util.Random;
import java.util.Scanner;

public class Principal {

    public Principal() {
        float login[] = new float[4];
        int aleatorio = 123456789;
        Random random = new Random();
        int cont = 0;   
        Scanner scanNum = new Scanner(System.in);
        Scanner scanStr = new Scanner(System.in);
        boolean flag = true;
        while (flag) {
            System.out.println("Olá! Bem vindo ao sistema de cadastro.");
            System.out.println("Digite o número correspondente a operação.");
            System.out.println("Você deseja:");
            System.out.println("1 - Cadastrar\n2 - Consultar\n3 - Modificar\n4 - Excluir\n5 - Sair");
            int opt = scanNum.nextInt();
            //while (opt <=0) {
            //    System.out.println("Digite um número válido.");
            //    opt = scanNum.nextInt();
            //}

            switch (opt) {
                case 1:
                    Opcao1 opcao1 = new Opcao1();
                    System.out.println("HEY");
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    System.exit(0);
            }
        }
    }

    public static void main(String[] args) {
        Principal principal = new Principal();
    }
}
Cadastrar
import java.util.Scanner;

public class Cadastrar {
    String nome;
    private int idade;
    private char sexo;
    private double peso;
    private String senha;
    private String login;
    

    public Cadastrar(String nome, int idade, char sexo, int peso, String senha, String login) {
        this.nome = nome;
        this.idade = idade;
        this.sexo = sexo;
        this.peso = peso;
        this.senha = senha;
        this.login = login;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public void setSexo(char sexo) {
        this.sexo = sexo;
    }

    public void setPeso(double peso) {
        this.peso = peso;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getNome() {
        return nome;
    }

    public int getIdade() {
        return idade;
    }

    public char getSexo() {
        return sexo;
    }

    public double getPeso() {
        return peso;
    }

    public String getSenha() {
        return senha;
    }

    public String getLogin() {
        return login;
    }
    
    
}
Opcao1
import java.util.Scanner;

public class Opcao1 {

    
    public Opcao1() {
        System.out.println("");
        System.out.println(princ.cont);
        Cadastrar cadastrar[] = new Cadastrar[4];
        System.out.println("lol");
        System.out.println("Aux é " + cont);
        Scanner scanNumero = new Scanner(System.in);
        Scanner scanString = new Scanner(System.in);
        for (int i = 0; i < 4; i++) {
            System.out.println("Olá usuário número " + aux);
            System.out.println("Aqui você deverá digitar seus dados de cadastro.");
            System.out.println("No final será gerado um número aleatório, onde poderá usar como login,");
            System.out.println("tanto quanto seu nome.");
            System.out.println("Digite seu nome:");
            cadastrar[i].setNome(scanString.nextLine());
            System.out.println("Digite sua idade:");
            cadastrar[i].setIdade(scanNumero.nextInt());
            System.out.println("Digite seu sexo:");
            cadastrar[i].setSexo(scanString.nextLine().charAt(0));
            System.out.println("Digite seu peso");
            cadastrar[i].setPeso(scanNumero.nextDouble());
            System.out.println("Digite sua senha:");
            String senhaLocal = scanNumero.nextLine();
            System.out.println("Confirme sua senha:");
            String senhaLocal2 = scanNumero.nextLine();
            while (senhaLocal2 != senhaLocal) {
                System.out.println("Suas senhas não coincidem.");
                System.out.println("\nDigite sua senha:");
                senhaLocal = scanNumero.nextLine();
                System.out.println("Confirme sua senha:");
                senhaLocal2 = scanNumero.nextLine();
            }
            cadastrar[i].setSenha(senhaLocal2);
            princ.login[0] = 1;
            break;

        }
    }
}
J

Amigo… você precisa estudar mais… entender o que é escopo… entender o que é atributo da classe…
A variavel cont não é um atributo da classe principal por isso não consegue acessar.

Se fizer assim

public class Principal {  
  
    public int cont = 0;
    public Principal() {  
        float login[] = new float[4];  
        int aleatorio = 123456789;  
        Random random = new Random();  
        cont = 0;

Colocando como atributo irá funcionar…

Ruttmann

Então colega, como nosso amigo acima falou, precisas fixar melhor os conceitos, do jeito que estás fazendo não está certo.

Essa solução que o professor te pediu é bem simples e rápida, e pode ser aprendida facilmente seguindo esta apostila: http://www.caelum.com.br/apostila-java-estrutura-dados/

Estude os capítulos de armazenamento sequencial e vetores que você já consegue fazer tranquilo!

:wink:

oitempao

Ah, entendi.
Me desculpem isajoiajsoi, é que o professor explicou sobre métodos ontem, e deu um exercício para o fim de semana, aí ficou meio dificil de pegar o conteúdo.
Porem fiz o que o jmmenezes recomendou, e ainda to tendo o problema com o objeto da classe Principal.

Alguma dica?

J

oitempao:
Ah, entendi.
Me desculpem isajoiajsoi, é que o professor explicou sobre métodos ontem, e deu um exercício para o fim de semana, aí ficou meio dificil de pegar o conteúdo.
Porem fiz o que o jmmenezes recomendou, e ainda to tendo o problema com o objeto da classe Principal.

Alguma dica?


Qual problema esta tendo???

Ruttmann

Vou te dar umas dicas:

Se você só precisa guardar quatro objetos em um vetor, vai precisar fazer isso:

Uma classe Pessoa, que vai ser a pessoa que vai ir pra dentro do vetor. Com seus respectivos atributos.

Uma classe Vetor, onde você vai criar o vetor de 4 posições e elaborar o método para adicionar as Pessoas.

E uma classe Main, só pra conter seu método main.

Você não vai conseguir acessar um atributo da classe Pessoa através de uma instancia da classe Vetor, os atributos só são acessados através das instancias de suas respectivas classes.

oitempao

Entendi, praticamente o que eu to fazendo porem de um modo diferente aisjoijas.

A classe Pessoa que vai pra dentro do vetor é o Cadastrar,
a classe Vetor é a que popula,
e a classe Principal que tem no meu código, é a que tem o menu, onde o usuario define se quer criar, ver, modificarou excluir o “cadastro”

ribclauport

Não coloque nomes de verbo em classes!

veja cadastrar é o nome de uma ação, logo seria um “método”, não uma classe.
Se quiser mesmo uma classe, coloque o nome de “Cadastro”, e não “Cadastrar”.

oitempao

Uma dúvida, isso é apenas para “identação” e para se achar melhor no código, ou tem algo que interfere nas proprias bibliotecas ???

PS: quando eu vou armazenar um valor com o setter como cadastrar[i].setNome(nome); ele da java.lang.NullPointerException

ribclauport

Quando se fala em "Classes", se diz a respeito a "Classificar", nós classificamos "coisas", e estas "coisas", quando "instanciadas", são objetos, sendo assim nós devemos ter objetos nomeados, e nomes são substantivos!.

Uma boa forma de você diferenciar é colocando artigos na frente de sua classe, veja

A Cadastrar --> sem sentido, pois é um verbo no infinitivo.
O Cadastro --> Um substantivo masculino, veja o Artigo "O" comprovando o fato.

Desta forma você consegue verificar se está dando ou não o nome de um Substantivo a uma Classe.

Criado 14 de dezembro de 2012
Ultima resposta 14 de dez. de 2012
Respostas 11
Participantes 4