Dúvida num método.[RESOLVIDO]

Tenho um exercicio que é:

Defina uma classe chamada Zodiaco.
Esta classe deverá conter dois métodos: O método main e um método chamado imprimeSigno.
No método main declare uma variável inteira chamada signo. Atribua à esta variável (através da leitura pelo teclado) o número do signo do zodíaco correspondente à data do seu aniversário, conforme lista abaixo:
10 signo do zodíaco: Aquário (21/jan à 19/fev)
20 signo do zodíaco: Peixes (20/fev à 20/mar)
30 signo do zodíaco: Áries (21/mar à 20/abr)
40 signo do zodíaco: Touro (21/abr à 20/mai)
50 signo do zodíaco: Gêmeos (21/mai à 20/jun)
60 signo do zodíaco: Câncer (21/jun à 21/jul)
70 signo do zodíaco: Leão (22/jul à 22/ago)
80 signo do zodíaco: Virgem (23/ago à 22/set)
90 signo do zodíaco: Libra (23/set à 22/out)
100 signo do zodíaco: Escorpião (23/out à 21/nov)
110 signo do zodíaco: Sagitário (22/nov à 21/dez)
120 signo do zodíaco: Capricórnio (22/dez à 20/jan)
No método main você deverá imprimir: "Você é do seguinte signo do zodíaco: " chamando, em seguida, o método imprimeSigno, que deve imprimir o signo em questão.
O método imprimeSigno deve ser declarado como método da classe e com um parâmetro inteiro. Ao se chamar imprimeSigno deve ser passado para ele o valor numérico armazenado na variável signo de main.
Por exemplo, se você atribuiu o valor 9 à variável signo, a saída do programa deverá ser: “Você é do seguinte signo do zodíaco: Libra”

Acho que estou errando quando fiz o metodo ImprimeSigno, o que estaria errado nele?

[code]import javax.swing.*;
public class Zodiaco {

public static void main(String[] args) {
     int signo;
     
     signo=Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro valor: "));
     
     System.out.println("Você é do seguinte signo do zodíaco:"+ImprimeSigno());
     
}
public void ImprimeSigno(int signo){
	
	switch (signo){
		
		case 1:
				System.out.println ("Libra");
                                            break;
				
		case 2:
				System.out.println ("leao");
                                             break;		
	}
}

}[/code]

Nesta caso cara vc tem duas opções.
1 - Voce cria um objeto da propria classe no metodo main.


import javax.swing.*;   
public class Zodiaco {   
           
       
    public static void main(String[] args) {  
         Zodiaco z = new Zodiaco(); 
         int signo=0;   
           
         signo=Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro valor: "));   
           
         System.out.println("Você é do seguinte signo do zodíaco:"+z.ImprimeSigno(signo));   
           
    }   
    public String ImprimeSigno(int signo){   
           
        switch (signo){   
               
            case 1:   
                    System.out.println ("Libra");   
                       
            case 2:   
                    System.out.println ("leao");           
        }   
    }   
}  

2- Ou vc cria o metodo ImprimeSigno statico:


import javax.swing.*;   
public class Zodiaco {   
           
       
    public static void main(String[] args) {   
         int signo;   
           
         signo=Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro valor: "));   
           
         System.out.println("Você é do seguinte signo do zodíaco:"+ImprimeSigno(signo));   
           
    }   
    public static String ImprimeSigno(int signo){   
           
        switch (signo){   
               
            case 1:   
                    System.out.println ("Libra");   
                       
            case 2:   
                    System.out.println ("leao");           
        }   
    }   
}  

Explicação: Pelo metodo main ser static ele só pode acessar metodos statics.
Não esqueça metodos static só podem acessar coisas static. De passar o parametro pro metodo kkkk… E por fim o metodo deve retornar uma string para que vc possa concatenar na frase.
[]'s

Nos 2 casos ele tá dando erro no

System.out.println("Você é do seguinte signo do zodíaco:"+z.ImprimeSigno(signo));

você deve passar uma variável inteira como argumento para o parâmetro de imprime signo, e utilizar um default no swicth, caso nenhum dos “case” testados de certo.

Desculpe esqueci um detalhe:


 public String ImprimeSigno(int signo){     
        String s = "";     
               String s = "";
        switch (signo) {
        case 1:
            s = "Libra";
            break;
        case 2:
            s = "leao";
            break;
        default:
            s = "";
            break;
        }
        return s;
    }    

Amigo se você tivesse lido o código teria notado a falta do return no metodo.
Não copie e cole, leia os posts atentamente e aprenda. É bem legal :wink:

Não ficaria assim no caso?

[code]import javax.swing.*;
public class Zodiaco {

public static void main(String[] args) {
	 Zodiaco z = new Zodiaco();  
     int signo=0;
     
     signo=Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro valor: "));
     
     System.out.println("Você é do seguinte signo do zodíaco:"+z.ImprimeSigno(int signo));
     
}
public int ImprimeSigno(int signo){
	
	switch (signo){
		
		case 1:
				System.out.println ("Libra");
				break;
				
		case 2:
				System.out.println ("Libra");
				break;
				
				default:
					System.out.println ("não");		
	}
}

}
[/code]

mais da erro também, ele pede pra tira as } dae

hummmm pior que era mesmo, valeu cara!!!

Acho que você poderia excluir esse case se usasse um vetor para armazenar os signos…

Alex por favor, se a duvida foi sanada altere o nome do topico e coloque [RESOLVIDO]…
Vitor acho que isso foi só um exemplo, ninguem identifica os signos por numeros, mas por datas.
[]'s

Só uma pergunta, estou começando em java e nesse exemplo seria o ImprimeSigno um método da classe ou metodo de instância???

Não entendi muito bem a diferença entre os dois, se puder me dar uma ajuda eu agradeço.

Se o metodo é static ele é de classe e nao precisa de uma instancia (objeto) para ser invocado.