Switch case - duvida cruel

23 respostas
vimorrison

Oi pessoal, estou com uma duvida no switch case… o lance e o seguinte, tenho q digitar um numero q me retorne um mes (ex: se eu digitar “1” o programa vai retornar “Janeiro”), enfim, tudo vai bem ate chegar ao mes de outubro… qual sera o problema? sera q ele nao aceita dois caracteres? (no caso 10, 11 ou 12)??? Me ajudem!!!

Obrigada a todos,

Viviane Saraiva

23 Respostas

V

Olá,

o switch aceita inteiros sim! Posta a parte do código que está com problema, assim podemos ver melhor o que está acontecendo…

Tiago

Anderson_Schmidt

hi !!

Qual o tipo de variável que vc está usando ?

PS: talvez apenas para teste, tente usar uma estrutura condicional simples, o if/else.

Schmidt

dsiviotti

Para uma lista fixa como meses não use switch nem if:

public class Mes {
    
    private final String[] meses = 
     {"Janeiro", "Fevereiro", "Março", "Abril",
      "Maio", "Junho", "Julho", "Agosto",
      "Setembro", "Outubro", "Novembro", "Dezembro"
     };
    
    public String getMes(int numero){
        return meses[numero-1];
        // 1 = Jajeiro, 2 = Fevereiro etc
    }
    
    public static void main(String[] args){
        Mes mes = new Mes();
        System.out.println(mes.getMes(9)); // imprime Setembro
    }
}
vimorrison
class ex12a3

{

public static void main (String args [])

{
if (args.length>0)
  {
   
   switch (args [0].charAt(0))
    {
   	  case '1':
  	   System.out.println ("Janeiro");break;
  	  case '2':
  	   System.out.println ("Fevereiro");break;
  	  case '3':
  	   System.out.println ("Marco");break;
  	  case '4':
  	   System.out.println ("Abril");break;
  	  case '5':
  	   System.out.println ("Maio");break;
  	  case '6':
  	   System.out.println ("Junho");break;
  	  case '7':
  	   System.out.println ("Julho");break;
  	  case '8':
  	    System.out.println ("Agosto");break;
  	  case '9':
  	    System.out.println ("Setembro");break;
  	  case '10':
  	    System.out.println ("Outubro");break;
  	  case '11':
  	     System.out.println ("Novembro");break;
  	  case '12':
  	    System.out.println ("Dezembro");break;
  	
  	 default:System.out.println ("Nao e valido");
 	}	 
   }
   else System.out.println ("Valor nao valido");
 }
}

qdo eu digito 10, 11 ou 12 ele nao escreve os meses referentes… e qdo eu compilo ele acusa erro por eu ter colocado case ‘10’ ou 11 ou 12

obrigada a todos

pcalcado

O erro não é no switch, é no caracter. Você está tentnado usar o caracter ‘10’, mas aí são dois caracteres: ‘1’ e ‘0’ :wink:

Tente utilizar inteiros aoi invés de caracteres, e fazer seus case com ele.

vimorrison

Desculpe a minha ignorancia, mas como eu declaro isso? Quero dizer como eu declaro q eu quero a juncao dos caracteres 1 e 0? Seria case ‘1’&&‘0’ ou algo assim?

bjao e obrigada
dsiviotti

Ao invés de

case '10':
System.out.println ("Outubro");break;

faça

case 10:
System.out.println ("Outubro");break;

sem aspas

dsiviotti

agora eu vi que você está pegando o argumento da main. acho que pode ser assim:

int i = Integer.parseInt(args [0].charAt(0));
 switch (i)
vimorrison

Nao consegui fazer funcionar… :frowning: HELP!!!

dsiviotti

Foi mal, o código anterior dá pau por causa do char. Assim tá melhor:

public class Mes {
    
   
    public static void main(String[] args){
        if (args.length>0)  {
            String s = new String(args[0]);
            int i = Integer.parseInt(s);    
            switch (i)
            {
            case 1:
            System.out.println ("Janeiro");break;
            case 2:
            System.out.println ("Fevereiro");break;
            case 3:
            System.out.println ("Marco");break;
            case 4:
            System.out.println ("Abril");break;
            case 5:
            System.out.println ("Maio");break;
            case 6:
            System.out.println ("Junho");break;
            case 7:
            System.out.println ("Julho");break;
            case 8:
            System.out.println ("Agosto");break;
            case 9:
            System.out.println ("Setembro");break;
            case 10:
            System.out.println ("Outubro");break;
            case 11:
            System.out.println ("Novembro");break;
            case 12:
            System.out.println ("Dezembro");break;

            default:System.out.println ("Nao e valido");
            }     
         }
    }

}
vimorrison

Agradeco muito a sua ajuda, mas nao sei o q houve, copiei o seu codigo, compilei e ele nao me mostra mais nem o mes de janeiro qdo eu coloco 1… reparei q vc nao colocou aspas, entao eu tentei colocar pra ver se funcionava… tb nao funcionou!! O q sera q esta havendo???

bjao
T

Olá viviane… Acho que conheço o seu problema…
Se vc usa alguma IDE, esqueça por enquanto.
Compile o código do nosso colega Douglas e utilize a seguir o comando
java Mes <numero_do_mes> afinal, vc utiliza o args como arguimento. È batata, dá certinho… Testei agorinha

Bjos
Orlando

vimorrison

Eu estou usando o JCreator pra fazer esses programas… qdo eu compilo ele abre uma janela ja pra colocar os parametros do programa (no caso o numero do mes q eu quero)… nao entendi como eu vou usar o comando q vc falou… essa coisa nao funciona de JEITO NENHUM!

to ferrada, tenho q entregar isso amanha!!!!

mas obrigada assim mesmo

Viviane Saraiva

T

Viviane, eu tb testei no JCreator, e foi isso que deu errado.
1- cole o código no bloco de notas e salve em C: como Mes.java
2- utilize o comando javac Mes.java
3- digite java Mes 1
4- para testas o 2º dígito utilize java Mes 12
5- chuchubeleza

certo?

Bjocas
Orlando

vimorrison

Nao fique bravo comigo, por favor, afinal sou iniciante… mais uma pergunta…

2- utilize o comando javac Mes.java --ABRO UMA JANELA DO DOS PRA ISSO???

3- digite java Mes 1 – AINDA NO DOS???
4- para testas o 2º dígito utilize java Mes 12 – NO DOS???

SE FOR NO DOS, JA NAO CONSEGUI, ELE NAO RODA TB

           AGRADECO SUA AJUDA E SUA PACIENCIA

                    UM FORTE ABRACO
T

use o bloco de notas

T

Vê lá menina, também sou iniciante… Olha, você não usou nenhum tipo de interface com o usuário, então seu programa rodará em modo console, ou seja, pela telinha do DOS. Como vc usou o args[] como parâmetro, terá de inserir um argumento, e isso é feito via DOS por enquanto. ou Seja,
java Mes 12
este seu programa sempre rodará pelo DOS.

ainda não funcionou? poste detalhes então baby
a propósito, gostri do seu site

Bjocas

vimorrison

Ah ja to desistindo… fui no DOS e fiz exatamente isso… e nao funciona… fiz o lance pra compilar, ele tb nao compila… ou seja, nada acontece…
Ah, deixa pra la

Um gde bjo e obrigada assim mesmo
K

Viviane, na forma de array iria ficar assim:

public class Mes
{
	
	private static final String[] meses = 
            {"Janeiro", "Fevereiro", "Março", "Abril",
            "Maio", "Junho", "Julho", "Agosto",
            "Setembro", "Outubro", "Novembro", "Dezembro" };

	public static void main(String[] args)
	{
          if (args.length>0)  
          {
     	      int indice=Integer.parseInt(args[0])-1;
     	      System.out.println(meses[indice]);
          }
     	
       }
 }
K

Ah,
So adicionando
Você compila pelo JCreator mesmo… Pega o seu arquivo Mes.class e coloco no C:\ por exemplo
depois você abre o dos (se for no WinXP ou Win2000 basta digitar cmd no Iniciar>>Executar)
Após isso digite o seguinte

C:
java Mes 5
java Mes 1
Java Mes 12

E assim vai, ou seja o que você digitar depois do Mes será o mes e lembre-se que o nome da classe, nesse caso o Mes tem que ser escrito da mesma forma do .class

Espero te ajudado

K
dsiviotti:
Foi mal, o código anterior dá pau por causa do char. Assim tá melhor:
public class Mes {
    
   
    public static void main(String[] args){
        if (args.length>0)  {
            String s = new String(args[0]);
            int i = Integer.parseInt(s);    
            switch (i)
            {
            case 1:
            System.out.println ("Janeiro");break;
            case 2:
            System.out.println ("Fevereiro");break;
            case 3:
            System.out.println ("Marco");break;
            case 4:
            System.out.println ("Abril");break;
            case 5:
            System.out.println ("Maio");break;
            case 6:
            System.out.println ("Junho");break;
            case 7:
            System.out.println ("Julho");break;
            case 8:
            System.out.println ("Agosto");break;
            case 9:
            System.out.println ("Setembro");break;
            case 10:
            System.out.println ("Outubro");break;
            case 11:
            System.out.println ("Novembro");break;
            case 12:
            System.out.println ("Dezembro");break;

            default:System.out.println ("Nao e valido");
            }     
         }
    }

}

Para fazer esse código funcionar sem ter que passar o parametro pelo DOS (Pode compilar e rodar pelo JCreator mesmo)
Faça da seguinte forma:

import javax.swing.*;
public class Main {
    
   
    public static void main(String[] args){
       
            int i = Integer.parseInt(JOptionPane.showInputDialog("Entre com o mês"));
            switch (i)
            {
            case 1:
            System.out.println ("Janeiro");break;
            case 2:
            System.out.println ("Fevereiro");break;
            case 3:
            System.out.println ("Marco");break;
            case 4:
            System.out.println ("Abril");break;
            case 5:
            System.out.println ("Maio");break;
            case 6:
            System.out.println ("Junho");break;
            case 7:
            System.out.println ("Julho");break;
            case 8:
            System.out.println ("Agosto");break;
            case 9:
            System.out.println ("Setembro");break;
            case 10:
            System.out.println ("Outubro");break;
            case 11:
            System.out.println ("Novembro");break;
            case 12:
            System.out.println ("Dezembro");break;

            default:System.out.println ("Nao e valido");
            }     
         }
    }

E da forma de Array

import javax.swing.*;
class Mes
{

	public static void main(String[] args)
	{

	    String[] meses ={"Janeiro", "Fevereiro", "Março", "Abril","Maio", "Junho",
	     "Julho", "Agosto","Setembro", "Outubro", "Novembro", "Dezembro" };

	   int indice = Integer.parseInt(JOptionPane.showInputDialog("Entre com o mês"));
           System.out.println(meses[indice]);
       
     	
    }
}

Bem, agora vou mimi!
Espero te ajudado!

ystaile

Bom, do jeito que o [color=red]dsiviotti[/color] colocou da certinho…essa janelinha que aparece quando vc compila é pra entrada via args…bom era pra funcionar…ja tentou usar o JOptionPane? é melhor!

vimorrison

Pessoal, agradeco a ajuda e atencao de voces!

Obrigada e um beijo a todos!  8)
Criado 23 de abril de 2005
Ultima resposta 26 de abr. de 2005
Respostas 23
Participantes 8