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
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() 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.
importjava.util.Random;importjava.util.Scanner;publicclassPrincipal{publicPrincipal(){floatlogin[]=newfloat[4];intaleatorio=123456789;Randomrandom=newRandom();intcont=0;ScannerscanNum=newScanner(System.in);ScannerscanStr=newScanner(System.in);booleanflag=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");intopt=scanNum.nextInt();//while (opt <=0) {// System.out.println("Digite um número válido.");// opt = scanNum.nextInt();//}switch(opt){case1:Opcao1opcao1=newOpcao1();System.out.println("HEY");break;case2:break;case3:break;case4:break;case5:System.exit(0);}}}publicstaticvoidmain(String[]args){Principalprincipal=newPrincipal();}}
importjava.util.Scanner;publicclassOpcao1{publicOpcao1(){System.out.println("");System.out.println(princ.cont);Cadastrarcadastrar[]=newCadastrar[4];System.out.println("lol");System.out.println("Aux é "+cont);ScannerscanNumero=newScanner(System.in);ScannerscanString=newScanner(System.in);for(inti=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:");StringsenhaLocal=scanNumero.nextLine();System.out.println("Confirme sua senha:");StringsenhaLocal2=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
jmmenezes
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.
Estude os capítulos de armazenamento sequencial e vetores que você já consegue fazer tranquilo!
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
jmmenezes
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.