Swicth dentro de um while(RESOLVIDO)

ola pessoal, preciso que o codigo em questao insira um numero inteiro e imprima o mes referente ao numero, e que faça isso ate que seja digitado o numero 0 e encerre o laço;
ja olhei em outros topicos e nao encontrei a soluçao;
quando digito o numero me da um laço infinito;

import java.util.Scanner; public class Mes { public static void main (String [] args) { Scanner s = new Scanner (System.in); System.out.println("Digite o numero correspondente ao mês : "); int num = s.nextInt(); while (num != 0) { switch (num) { case 1: System.out.println("Janeiro"); break; case 2: System.out.println("Fevereiro"); break; case 3: System.out.println("Março"); 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("Apenas numeros de 1 a 12 são validos"); } } } }

está dando loop infinito pois vc não está relendo a entrada com o scanner

Esse aqui funciona!

import javax.swing.JOptionPane;

public class Meses {
  public static void main(String[] args) {
    String st = "Informe um número entre 1 e 12";
    st = JOptionPane.showInputDialog(null,st);
    byte mes = Byte.parseByte(st);
    
    switch (mes) {
      case 1:
        st = "janeiro";
        break;
      case 2:
        st = "fevereiro";
        break;
      case 3:
        st = "março";
        break;
      case 4:
        st = "abril";
        break;
      case 5:
        st = "maio";
        break;
      case 6:
        st = "junho";
        break;
      case 7:
        st = "julho";
        break;
      case 8:
        st = "agosto";
        break;
      case 9:
        st = "setembro";
        break;
      case 10:
        st = "outubro";
        break;
      case 11:
        st = "novembro";
        break;
      case 12:
        st = "dezembro";
        break;
      default: 
        st = "Mês inválido!";
        JOptionPane.showMessageDialog(null,st,"Erro",0);
        System.exit(0);
    }
    
    st = "Você escolheu o mês de " + st;
    JOptionPane.showMessageDialog(null,st,"Mensagem",1);
    System.exit(0);
  }
}

nao compreendi como posso fazer isso, estou tentando aq mais nao esta dando certo, se puder me dar mais alguma dica fico grato…

Vey, o code que te mandei em si funciona siim!! esta direitinho…

Agora tem q ver se vc ta colocando o nome da classe certa… igual a sua…

public class meses {

A classe tem q ter o nome “meses”

[quote=brunaum15]Esse aqui funciona!

[code]
import javax.swing.JOptionPane;

public class Meses {
public static void main(String[] args) {
String st = “Informe um número entre 1 e 12”;
st = JOptionPane.showInputDialog(null,st);
byte mes = Byte.parseByte(st);

switch (mes) {
  case 1:
    st = "janeiro";
    break;
  case 2:
    st = "fevereiro";
    break;
  case 3:
    st = "março";
    break;
  case 4:
    st = "abril";
    break;
  case 5:
    st = "maio";
    break;
  case 6:
    st = "junho";
    break;
  case 7:
    st = "julho";
    break;
  case 8:
    st = "agosto";
    break;
  case 9:
    st = "setembro";
    break;
  case 10:
    st = "outubro";
    break;
  case 11:
    st = "novembro";
    break;
  case 12:
    st = "dezembro";
    break;
  default: 
    st = "Mês inválido!";
    JOptionPane.showMessageDialog(null,st,"Erro",0);
    System.exit(0);
}

st = "Você escolheu o mês de " + st;
JOptionPane.showMessageDialog(null,st,"Mensagem",1);
System.exit(0);

}
}
[/code][/quote]

o meu tambem funciona desse jeito que vc fez, so que preciso que quando vc digite o numero e imprima o mes e volte para digitar denovo, o numero, ate que digite o 0 para sair;
tipo um menu…

obrigado agora compreendi, é so colocar o codigo

System.out.println("Digite o numero correspondente ao mês : "); num = s.nextInt();
no final do while

Claro, pra que complicar o que é simples…

import java.util.Scanner; public class Mes { public static void main (String [] args) { String[] meses = {"janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}; Scanner s = new Scanner (System.in); System.out.println("Digite o numero correspondente ao mês : "); int num = Integer.parseInt(s.nextLine()); while (num != 0) { if (num < 1 || num > 12) System.out.println("Apenas meses de 1 a 12 são validos"); else System.out.println(meses[num-1]); num = Integer.parseInt(s.nextLine()); } } }

No projeto que eu trabalhei, eu precisei que os meses fossem retornados em uma língua especifíca… sendo assim tive que substituir o vetor de meses, pela API Calendar, mesclei o código com a solução que encontrei, pensei ser pertinente postar o código aqui, já que o Vini pode fazer alguma observação de melhora do mesmo, segue:

[code]package food;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.util.Scanner;
public class Mes {

Mes(Locale localeUser, String pattern){
	this.localeuser = localeUser;
	sdf = new SimpleDateFormat(pattern,localeuser);
}

public Locale localeuser;
private SimpleDateFormat sdf;

public String getMes(int mes){
   	Calendar calendar = Calendar.getInstance(localeuser);
	calendar.set(Calendar.MONTH, mes-1);
	String textoMes = sdf.format(calendar.getTime());
	return textoMes;
 }

public static void main (String [] args) {  
    //Mes m = new Mes(new Locale("pt", "BR"),"MMMM");
	Mes m = new Mes(new Locale("en","US"),"MMMM");
    Scanner s = new Scanner (System.in);  
    System.out.println("Digite o numero correspondente ao mês : ");  
    int num = Integer.parseInt(s.nextLine());  
    while (num != 0) {  
        if (num < 1 || num > 12)   
            System.out.println("Apenas meses de 1 a 12 são validos");  
        else  
          System.out.println(m.getMes(num));
          num = Integer.parseInt(s.nextLine());  
    }  
}  

} [/code]

[quote=ViniGodoy]Claro, pra que complicar o que é simples…

import java.util.Scanner; public class Mes { public static void main (String [] args) { String[] meses = {"janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}; Scanner s = new Scanner (System.in); System.out.println("Digite o numero correspondente ao mês : "); int num = Integer.parseInt(s.nextLine()); while (num != 0) { if (num < 1 || num > 12) System.out.println("Apenas meses de 1 a 12 são validos"); else System.out.println(meses[num-1]); num = Integer.parseInt(s.nextLine()); } } }[/quote]

obrigado viny e ribclauport , nem tinha pensado em usar arrays, é sompre bom aprender mais, vou guardar essas podem ser uteis mais pra frente

Legal. Você pode obter a lista de todos os meses e dias da semana usados pelo Calendar e pelo Formatter através da classe DateFormatSymbols:
http://docs.oracle.com/javase/7/docs/api/java/text/DateFormatSymbols.html

Por exemplo:

[code]package food;
import java.util.DateFormatSymbols;
import java.util.Calendar;
import java.util.Locale;
import java.util.Scanner;
public class Mes {
private Locale localeUser;

Mes(Locale localeUser){
    this.localeuser = localeUser;		
}

public String getMes(int mes){
    String meses[] = new DateFormatSymbols(localeUser).getMonths();
    return meses[mes-1];
}

public static void main (String [] args) {  
    //Mes m = new Mes(new Locale("pt", "BR"));
    Mes m = new Mes(new Locale("en","US"));
    Scanner s = new Scanner (System.in);  
    System.out.println("Digite o numero correspondente ao mês : ");  
    int num = Integer.parseInt(s.nextLine());  
    while (num != 0) {  
        if (num < 1 || num > 12)   
            System.out.println("Apenas meses de 1 a 12 são validos");  
        else  
          System.out.println(m.getMes(num));
          num = Integer.parseInt(s.nextLine());  
    }  
}  

} [/code]

É claro que não tem a flexibilidade e escolher o formato do mês (no caso, eu usaria mesmo o seu código), mas se isso não é necessário, esse método é bem mais leve (o que pode ser útil se vc estiver fazendo uma rotina para converter milhares de registros de um BD, por exemplo). O DateFormatSymbols também tem o método getAvailableLocales() que retorna todos os locales para os quais o java possui formato de data disponível.

Vini eu li o java Doc que você me passou mas eu ainda não consegui pensar na lógica em como usar, já que o codigo abaixo esta dando erro veja:

 public String getMes(int mes){  
        String meses[] = new DateFormatSymbols(localeUser);  
        return meses[mes-1];  
    }  

Primeira dúvida:
No Caso DateFormaSymbols(localeUser) retorna um DateFormatSymbols… e não um array de Strings

Segunda dúvida
Como ficaria o código com a adaptação, fiquei confuso agora de como usar o que você passou, poderia explanar melhor?

Obrigado pela atenção, e me desculpe a ignorância.

Pucha agora entendi, na verdade é para chamar:

  public String getMes(int mes){  
        String meses[] = new DateFormatSymbols(localeUser).getMonths();  
        return meses[mes-1];  
    }

E ae não cria os objetos Calendar. viche entendi muito obrigado essa foi muito boa mesmo.

Ops tem razão, esqueci de chamar o getMonths(). É que montei esse código direto no GUJ, não no Eclipse.