packageexercicio5;importjavax.swing.JOptionPane;publicclassCavalo{privateCavalo[]cavalos=newCavalo[3];privateStringnome;privatefloatdistancia_percorrida;privatecharavatar;privatefloatdistancia_atual;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome2){nome=nome2;}publicfloatgetDistanciaPercorrida(){returndistancia_percorrida;}publicvoidsetDistanciaPercorrida(floatdistancia_percorrida2){distancia_percorrida=distancia_percorrida2;}publicchargetAvatar(){returnavatar;}publicvoidsetAvatar(charavatar2){avatar=avatar2;}publicvoidCavalo(){try{for(inti=0;i<cavalos.length;i++){cavalos[i].setNome(JOptionPane.showInputDialog("Digite o nome do cavalo "+(i+1)));// linha 46if(i==0)cavalos[i].setAvatar('B');elseif(i==1)cavalos[i].setAvatar('P');elsecavalos[i].setAvatar('M');cavalos[i].setDistanciaPercorrida(0);}}catch(NullPointerExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){Cavalocavalos=newCavalo();cavalos.Cavalo();// linha 65}}
run:
java.lang.NullPointerException
at exercicio5.Cavalo.Cavalo(Cavalo.java:46)
at exercicio5.Cavalo.main(Cavalo.java:65)
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)
tira esse .Cavalo(); ai da linha 65… entretando, o que vc quer fazer?
guisantogui
o metodo naum seria com letra minuscula?
em JAVA se usa CaSeSeNsItIvE, não esqueça!
progoz
Você instancio o array, porém falta instanciar os elementos do array.
Assim.
importjavax.swing.JOptionPane;publicclassCavalo{privateCavalo[]cavalos=newCavalo[3];privateStringnome;privatefloatdistancia_percorrida;privatecharavatar;privatefloatdistancia_atual;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome2){nome=nome2;}publicfloatgetDistanciaPercorrida(){returndistancia_percorrida;}publicvoidsetDistanciaPercorrida(floatdistancia_percorrida2){distancia_percorrida=distancia_percorrida2;}publicchargetAvatar(){returnavatar;}publicvoidsetAvatar(charavatar2){avatar=avatar2;}publicvoidCavalo(){try{for(inti=0;i<cavalos.length;i++){cavalos[i]=newCavalo();// Aqui instancia o Cavalo na Posição do arraycavalos[i].setNome(JOptionPane.showInputDialog("Digite o nome do cavalo rá "+(i+1)));if(i==0)cavalos[i].setAvatar('B');elseif(i==1)cavalos[i].setAvatar('P');elsecavalos[i].setAvatar('M');cavalos[i].setDistanciaPercorrida(0);}}catch(NullPointerExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){Cavalocavalos=newCavalo();cavalos.Cavalo();// linha 65}}
R
rnpenna
Eu não posso tirar, porque essa é a chamada para o método construtor que faz o que o exercício quer. O que eu quero é executar o método construtor.
o metodo naum seria com letra minuscula?
em JAVA se usa CaSeSeNsItIvE, não esqueça!
O método construtor, se não me engano, é maiúsculo mesmo.
eberson_oliveira
Onde você está carregando o seu array de cavalos? Por isso está dando NullPointer… O valor padrão para as posições de uma array é o valor padrão para o tipo de elemento armazenado. No seu caso Cavalo… logo o seu array de cavalos começa com todas as posicoes null.
Outra coisa… o nome do seu método ficou muito ruim… parece até um construturo… procure por outro nome e procure seguir o padrão camelCase.
Isso não é um construtor válido:
publicvoidCavalo()
Isso sim, é… Notou a diferença?
publicCavalo()
[]s
R
rnpenna
Valeu progoz, deu certo!
E
entanglement
Você tem alergia a ovos? Você pode imaginar uma coisa assim: em Java, quando você cria uma caixa de ovos (ou seja, um array de ovos) essa caixa vem vazia, só com os espaços para você pôr os ovos. Você precisa criar os ovos separadamente. Então, para seu programa funcionar, você teria algo parecido com:
Troque “Ovo” por “Cavalo” e seu programa irá funcionar.
progoz
esse Metódo Cavalo nunca foi um construtor por metódos construtores não tem tipo de retorno para ser um metódo construtor ficaria assim
public Cavalo()
{
try
{
for(int i=0;i<cavalos.length;i++)
{
cavalos[i] = new Cavalo();
cavalos[i].setNome(JOptionPane.showInputDialog("Digite o nome do cavalo rá "+(i+1))); // linha 46
if(i==0)
cavalos[i].setAvatar('B');
else if(i==1)
cavalos[i].setAvatar('P');
else
cavalos[i].setAvatar('M');
cavalos[i].setDistanciaPercorrida(0);
}
}
catch(NullPointerException e)
{
e.printStackTrace();
}
}
e o main assim
public static void main(String[] args)
{
Cavalo cavalos = new Cavalo();
}
R
rnpenna
esse Metódo Cavalo nunca foi um construtor por metódos construtores não tem tipo de retorno para ser um metódo construtor ficaria assim
...
e o main assim
Tentei fazer essas mudanças e olha como ficou o código:
packageexercicio5;importjavax.swing.JOptionPane;publicclassCavalo{privateCavalo[]cavalos=newCavalo[3];privateStringnome;privatefloatdistancia_percorrida;privatecharavatar;privatefloatdistancia_atual;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome2){nome=nome2;}publicfloatgetDistanciaPercorrida(){returndistancia_percorrida;}publicvoidsetDistanciaPercorrida(floatdistancia_percorrida2){distancia_percorrida=distancia_percorrida2;}publicchargetAvatar(){returnavatar;}publicvoidsetAvatar(charavatar2){avatar=avatar2;}publicCavalo(){try{for(inti=0;i<cavalos.length;i++){cavalos[i]=newCavalo();cavalos[i].setNome(JOptionPane.showInputDialog("Digite o nome do cavalo "+(i+1)));if(i==0)cavalos[i].setAvatar('B');elseif(i==1)cavalos[i].setAvatar('P');elsecavalos[i].setAvatar('M');cavalos[i].setDistanciaPercorrida(0);}}catch(NullPointerExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){Cavalocavalos=newCavalo();}}
Mas deu uma porção de erros...
run:
Exception in thread "main" java.lang.StackOverflowError
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
at exercicio5.Cavalo.(Cavalo.java:46)
... um milhão de vezes :?
guisantogui
Estou de memoria vc deve ter feito algum loop infinito!!
olhe com mais atenção o seu for, aparentemente esta correto!
eberson_oliveira
Estourou a pilha porque dentro do construtor você ficou chamando o construtor...
procura fazer assim:
private Cavalo[] cavalos = new Cavalo[3]; //tira esse cara da classe cavalo
publicCavalo(charavatar){this.setNome(JOptionPane.showInputDialog("Digite o nome do cavalo "));this.setAvatar(avatar);this..setDistanciaPercorrida(0);}publicstaticvoidmain(String[]args){Cavalo[]cavalos=newCavalos[3];try{for(inti=0;i<cavalos.length;i++){if(i==0)cavalos[i]=newCavalo('B');elseif(i==1)cavalos[i]=newCavalo('P');elsecavalos[i]=newCavalo('M');}}catch(NullPointerExceptione){e.printStackTrace();}}
Assim você vai conseguir fazer o mesmo que estava fazendo... de uma perspectiva um pouco diferente...
[]s>
progoz
Mas deu uma porção de erros...
Veja o que acontece. O que você quer fazer não pode está dentro do construtor, nessa linha
cavalos[i]=newCavalo();//Linha44
Ele faz a chamada do construtor que é o começo do mesmo método que já esta em execução aí caí num loop infinito.
As alterações que tinha sugerido era a titulo de conhecimento. Você pode criar um novo método publico e invocar no main.
Algo do tipo.
publicclassCavalo{privateCavalo[]cavalos=newCavalo[3];privateStringnome;privatefloatdistancia_percorrida;privatecharavatar;privatefloatdistancia_atual;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome2){nome=nome2;}publicfloatgetDistanciaPercorrida(){returndistancia_percorrida;}publicvoidsetDistanciaPercorrida(floatdistancia_percorrida2){distancia_percorrida=distancia_percorrida2;}publicchargetAvatar(){returnavatar;}publicvoidsetAvatar(charavatar2){avatar=avatar2;}publicCavalo(){}// ConstrutorpublicvoidcadastrarCavalo()// Método que cadastra os Cavalos.{try{for(inti=0;i<cavalos.length;i++){cavalos[i]=newCavalo();cavalos[i].setNome(JOptionPane.showInputDialog("Digite o nome do cavalo rá "+(i+1)));// linha 46if(i==0)cavalos[i].setAvatar('B');elseif(i==1)cavalos[i].setAvatar('P');elsecavalos[i].setAvatar('M');cavalos[i].setDistanciaPercorrida(0);}}catch(NullPointerExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){Cavalocavalos=newCavalo();cavalos.cadastrarCavalo();}