Boa tarde pessoal, estou com problema , eu criei uma classe com o nome Dog e e na classe de teste q chamei de DogTeste e nessa classe estou criando um objeto de matriz do tipo Dog só q não estou conseguindo fazer com que o resultado apareça no console está dando
o seguinte erro:Exception in thread “main” java.lang.NullPointerException
at controller.DogsTest.main(DogsTest.java:17).
O meu código está desse jeito:
package controller;
import model.Dogs;
public class DogsTest {
public static void main(String[] args) {
Dogs[] dog=new Dogs[3];
dog[0]=new Dogs();
dog[0].name="fido";
dog[0].size=20;
dog[0].barck();
dog[1].name="Troll";
dog[1].size=30;
dog[1].barck();
dog[2].name="Sany";
dog[2].size=20;
dog[2].barck();
int x=0;
while(x<dog.length) {
dog[x].name;
x++;
}
}
}
Aguem poderia me dar um help?
Sc295marcoaurelio:
dog[0]=new Dogs();
Você apenas instanciou um objeto Dog e o atribuiu no index 0.
Os outros 2 indexes (1 e 2) estão null (valor padrão).
Então faça a mesma coisa:
dog[1] = new Dog();
dog[2] = new Dog();
1 curtida
Valeu amigo mas ainda está dando este erro:
Lati
Lati
Lati
“model.Dogs@4517d9a3
model.Dogs@372f7a8d
model.Dogs@2f92e0f4”
Só está mostrando a ação do método que criei chamado barck() o name e o size não está
aparecendo.
Mostre o código do seu objeto Dogs.
Ele provavelmente não implementa o método toString()
Ok:
package model;
public class Dogs {
public String name;
public int size;
public void barck() {
System.out.println("Lati");
}
public void eat() { }
public void chaseCat() { }
}
Alô amigo boa noite. Está n escuta?
Em quais momentos você chamou o método println?
Acho que o código principal não tá atualizado.
No método main não tem nenhum print.
Boa noite amigo, consegui resolver o p com sua ajuda fico muito agradecido. Eu coloquei
dessa forma no final da main():
System.out.println(dog[x].name);
System.out.println(dog[x].size); Desse modo aparece no console o nome , o tamanho e a
ação de cada método de cada objeto. Muito obrigado.
Sc295marcoaurelio:
Dogs[] dog=new Dogs[3];
Tenha o hábito de dar nomes coerentes às suas classes e variáveis.
Cada instância da classe Dogs
representa um único cachorro , então ela deveria se chamar Dog
, no singular.
O seu array dog
, armazena vários cachorros , então ele deveria se chamar dogs
, no plural.
Veja seu código refatorado:
package controller;
import model.Dog;
public class DogsTest {
public static void main(String[] args) {
Dog[] dogs = new Dog[3];
dogs[0] = new Dog();
dogs[0].name="fido";
dogs[0].size=20;
dogs[1] = new Dog();
dogs[1].name = "Troll";
dogs[1].size = 30;
dogs[2] = new Dog();
dogs[2].name = "Sany";
dogs[2].size = 20;
int x = 0;
while (x < dogs.length) {
Dog dog = dogs[x];
System.out.println(dog.name);
System.out.println(dog.size);
dog.barck();
System.out.println();
x++;
}
}
}
Eu recomendo você inserir getters e setters, esse tipo de pratica está bem ultrapassada isso pode te dar muita dor de cabeça um dia.
Na maioria dos casos, getters e setters são um falso encapsulamento pois simplesmente são métodos de delegação que expõe um atributo privado como se ele fosse público.
Dê uma lida nos materiais e livros do Robert C. Martin (Uncle Bob), autor do “Código Limpo” (“Clean Code”).