Erro reporta problema com variaveis estáticas e não estáticas
6 respostas
L
Luciano_Mattar
Olá pessoal,
Estou lidando com a construção de um programa que retorna um valor aleatório para lançamento de dados. Criei dois dados, dado e dado2. Agora, estou tendo este erro. Alguma luz, por favor.
C:\Documents and Settings\l>javac exercicioClasse1.java
exercicioClasse1.java:3: non-static variable this cannot be referenced from a st
atic context
Cdado dado=new Cdado();
^
exercicioClasse1.java:5: non-static variable this cannot be referenced from a st
atic context
Cdado dado2=new Cdado();
^
2 errors
Engraçado que o erro está fazedo referência a um this que não uso.
Alguém saberia me explicar o erro conceitualmente? Talvez assim seja mais fácil para entender o que está ocorrendo.
att.
marcosharbs
se vc copiar todo o codigo e rodar vai funcionar eu testei
so vai estourar uma exceção durante pq vc vai acessar um indice do array que não existe ali no seu System.out…
mas o erro é o seguinte:
A classe Cdado é uma classe interna está declarada dentro da classe exercicioClasse1 então vc vai conseguir instanciar
objetos da classe Cdado apenas dentro da classe exercicioClasse1, por isso fiz aquele metodo dentro de exercicioClasse1
que reotorna uma instância de Cdado ai no main instancio um objeto do tipo exercicioClasse1 e chamo o metodo
getNewInstanceOfCdado() para me retornar uma intancia de Cdado.
Do jeito que vc está fazendo vc não vai conseguir intanciar no main a classe Cdado pois ela é apenas instanciável dentro do escopo
da classe exercicioClasse1.
Eu separei as classes exercicioClasse1 da Cdado e passou a compilar perfeitamente, restando apenas a exceção que tinha mencionado. Aproveitando a oportunidade, por que deu a dado exceção?
L
Luciano_Mattar
Resolvi o problema da exceção!
Obrigado por tudo pessoal.
O código ficou assim.
classexercicioClasse1{publicstaticvoidmain(String[]args){Cdadodado=newCdado();dado.rolar();Cdadodado2=newCdado();int[]d=newint[1999];intcounter=0;for(;counter<d.length;counter++){d[counter]=dado.gerarFace();System.out.println(d[counter]+"e a face superior do dado!");}}}classCdado{privateintface;publicintgerarFace(){return(int)(Math.random()*6+0.5);}publicvoidrolar(){face=gerarFace();}}