Switch case - duvida cruel

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

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

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

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
    }
}
1 curtida

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

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.

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

Ao invés de

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

faça

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

sem aspas

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) 
1 curtida

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

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");
            }     
         }
    }

}
1 curtida

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

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

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

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

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

use o bloco de notas

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

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

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]);
          }
     	
       }
 }