[Resolvido] Retorno de método de outra classe na classe main

9 respostas
catia.alessandra

Bom dia.
Estou fazendo uma atividade básica, pra faculdade, mas estou meio enferrujada em questão da classe main.
Já pesquisei, encontrei vários resultados, a maioria do GUJ, e consegui melhorar minhas classes.
Mas ainda estou com dúvidas, e não está retornando o que eu esperava, então resolvi pedir ajuda :wink:

minha classe main é a seguinte:

import java.util.Scanner;

import Animal.Gato;

public class main {
	public static void main (String args[]){
		
		System.out.println("Menu de Opções: ");
		System.out.println("1: Gato");
		System.out.println("2: Girafa");
		System.out.println("3: Auto Básico");
		System.out.println("4: Auto COmpleto");
		Scanner scan = new Scanner(System.in);  
		int opcao = scan.nextInt(); 
		
		if (opcao == 1){
			Gato gato = new Gato();
			gato.getAnimal("5 Kg", "Carnívoro", "Mamífero");
			System.out.println(gato);
		}
	}

}

e minha classe Gato:

package Animal;

public class Gato {
	public String getAnimal(String peso, String tipoal, String tipoan) {
		Animal animal = new Animal();
		peso = animal.Peso("");
		tipoal = animal.TipoAlimentacao("");
		tipoan = animal.TipoAnimal("");
		return (peso + tipoal + tipoan);
	}
}

classe animal:

package Animal;

public class Animal {
	
	public String Peso (String peso){
		return peso;
	}
	
	public String TipoAlimentacao (String tipoal){
		return tipoal;
	}

	public String TipoAnimal (String tipoan){
		return tipoan;
	}
}

Tudo muito simples.
Minha dúvida é que, quando executo a main, e eu digito a opção, retorna o seguinte:

Menu de Opções: 1: Gato 2: Girafa 3: Auto Básico 4: Auto COmpleto 1 Animal.Gato@80f4cb
o que eu fiz errado??? :?:

desde já agradeço se alguém puder me ajudar :P

9 Respostas

rmendes08

Quando você passa um objeto para o método System.out.println() ele imprime o resultado da chamada do método toString() sobre o objeto. No caso, ele está imprimindo o resultado da implementação padrão do método, que é o nomeDaClasse + “@” + idDoObjeto.

catia.alessandra

Bom, o que eu tenho que fazer então? :oops:

rmendes08

Você pode passar o resultado da chamada de getAnimal() diretamente para o System.out.println(), ou então não sua classe Gato você pode sobrescrever toString() para retornar o resultado de getAnimal().

catia.alessandra

Assim:

if (opcao == 1){ Gato gato = new Gato(); System.out.println(gato.getAnimal("5 Kg", "Carnívoro", "Mamífero")); } else if (opcao == 2){ Girafa girafa = new Girafa(); System.out.println(girafa.getAnimal("1 Tonelada", "Herbívoro", "Mamífero")); } else if (opcao == 3){ AutomovelBasico autobas = new AutomovelBasico(); System.out.println(autobas.getAuto("Opcional", "Não", "Gasolina")); } else if (opcao == 4){ AutomovelCompleto autocom = new AutomovelCompleto(); System.out.println(autocom.getAuto("Sim", "Sim", "Flex (Gasolina e Álcool")); }

Mas dai ele termina e não tras nada Oo :?

renamed

Ele traz sim, ele traz “” + “” + “”, pq é isso que vc está fazendo aqui.

public class Gato {
	public String getAnimal(String peso, String tipoal, String tipoan) {
		Animal animal = new Animal();
		peso = animal.Peso("");
		tipoal = animal.TipoAlimentacao("");
		tipoan = animal.TipoAnimal("");
		return (peso + tipoal + tipoan);
	}
}

Pq vc nao faz assim?

public class Gato {
	public String getAnimal(String peso, String tipoal, String tipoan) {
		Animal animal = new Animal();
		peso = animal.Peso(peso);
		tipoal = animal.TipoAlimentacao(tipoal);
		tipoan = animal.TipoAnimal(tipoan);
		return (peso + tipoal + tipoan);
	}
}

:wink:

renamed

Aliás, agora que vi… pq vc está setando o valor do peso, que vc passou por parâmetro, para a variável peso no metodo getAnimal?

catia.alessandra

Meu trabalho é o seguinte:

<blockquote>Crie uma classe Animal com 3 atributos

Crie uma classe Gato que seja uma classe filha da classe Animal;

Crie uma classe Girafa, filha da classe Animal;</blockquote>

Ai, fiz a Classe animal, a gato e a girafa. Ai, na main eu chamei elas atraves de um menu de opções e de acordo com a opção, era pra trazer os dados. eu tinha setado os valores, por exemplo, na classe gato. Mas dai quando eu ia chamar o método na main, ele me pediu os valores, por isso que coloquei os valores na main. :? :oops:

discorpio

Bom dia a todos.

Não está retornando nada, simplesmente porque na classe Gato, voce atribuiu valores nulos, assim:

package Animal;  
  
public class Gato {  
    public String getAnimal(String peso, String tipoal, String tipoan) {  
        Animal animal = new Animal();  
        peso = animal.Peso("");  // Atribuiu valor ""
        tipoal = animal.TipoAlimentacao("");   // Atribui valor ""
        tipoan = animal.TipoAnimal("");   // Atribui valor ""
        return (peso + tipoal + tipoan);   // Vai retornar valor ""
    }  
}

Mude a classe Gato e a de qualquer animal assim:

package Animal;  
  
public class Gato {  
    public String getAnimal(String peso, String tipoal, String tipoan) {  
        return (peso + tipoal + tipoan);  
    }  
}

Se voce pretende fazer persistencia na classe Animal então mude a sua classe animal assim:

public class Animal {

    private static String peso, tipoalimentacao, tipoanimal;  
      
    public static String getPeso (){  
        return peso;  
    }

    public static void setPeso(String peso){
        Animal.peso = peso;
    }  
      
    public static String tipoAlimentacao (){  
        return tipoalimentacao;  
    }

    public static void setTipoalimentacao(String tipoalimentacao){
        Animal.tipoalimentacao = tipoalimentacao;
    }  
  
    public static String tipoAnimal () {  
        return tipoanimal;  
    }

    public static void setTipoanimal(String tipoanimal){
        Animal.tipoanimal = animal;
    }  
}

E ai na classe Gato ou qualquer animal, voce fazer assim:

package Animal;  
  
public class Gato {  
    public String getAnimal(String peso, String tipoal, String tipoan) {   
        Animal.setPeso(peso);  
        Animal.setTipoalimentacao(tipoal);  
        Animal.setTipoanimal(tipoan);  
        return (peso + tipoal + tipoan);  
    }  
}

Repare que ao declarar todos os métodos da classe Animal como estáticos a classe se torna totalmente estática, isto significa dizer que voce não precisa instanciar a classe Animal para acessar os seus métodos. Outra vantagem disto, é que os valores atribuídos nos métodos “sets” ficam inalterados e com uma única referência, permitindo assim, voce fazer a persistência de seus dados.

catia.alessandra

Deu certo, muito obrigada.
To meio enferrujada, mas já deu pra entender melhor :smiley:

Criado 7 de março de 2011
Ultima resposta 7 de mar. de 2011
Respostas 9
Participantes 4