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
B
brunaum15
Esse aqui funciona!
importjavax.swing.JOptionPane;publicclassMeses{publicstaticvoidmain(String[]args){Stringst="Informe um número entre 1 e 12";st=JOptionPane.showInputDialog(null,st);bytemes=Byte.parseByte(st);switch(mes){case1:st="janeiro";break;case2:st="fevereiro";break;case3:st="março";break;case4:st="abril";break;case5:st="maio";break;case6:st="junho";break;case7:st="julho";break;case8:st="agosto";break;case9:st="setembro";break;case10:st="outubro";break;case11:st="novembro";break;case12: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);}}
marco-oliveira
nao compreendi como posso fazer isso, estou tentando aq mais nao esta dando certo, se puder me dar mais alguma dica fico grato…
B
brunaum15
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…
publicclassmeses{
A classe tem q ter o nome “meses”
marco-oliveira
brunaum15:
Esse aqui funciona!
importjavax.swing.JOptionPane;publicclassMeses{publicstaticvoidmain(String[]args){Stringst="Informe um número entre 1 e 12";st=JOptionPane.showInputDialog(null,st);bytemes=Byte.parseByte(st);switch(mes){case1:st="janeiro";break;case2:st="fevereiro";break;case3:st="março";break;case4:st="abril";break;case5:st="maio";break;case6:st="junho";break;case7:st="julho";break;case8:st="agosto";break;case9:st="setembro";break;case10:st="outubro";break;case11:st="novembro";break;case12: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);}}
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...
marco-oliveira
obrigado agora compreendi, é so colocar o codigo
System.out.println("Digite o numero correspondente ao mês : ");
num = s.nextInt();
no final do while
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());
}
}
}
ribclauport
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:
packagefood;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Locale;importjava.util.Scanner;publicclassMes{Mes(LocalelocaleUser,Stringpattern){this.localeuser=localeUser;sdf=newSimpleDateFormat(pattern,localeuser);}publicLocalelocaleuser;privateSimpleDateFormatsdf;publicStringgetMes(intmes){Calendarcalendar=Calendar.getInstance(localeuser);calendar.set(Calendar.MONTH,mes-1);StringtextoMes=sdf.format(calendar.getTime());returntextoMes;}publicstaticvoidmain(String[]args){//Mes m = new Mes(new Locale("pt", "BR"),"MMMM");Mesm=newMes(newLocale("en","US"),"MMMM");Scanners=newScanner(System.in);System.out.println("Digiteonumerocorrespondenteaomês:");intnum=Integer.parseInt(s.nextLine());while(num!=0){if(num<1||num>12)System.out.println("Apenasmesesde1a12sãovalidos");elseSystem.out.println(m.getMes(num));num=Integer.parseInt(s.nextLine());}}}
marco-oliveira
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());
}
}
}
obrigado viny e ribclauport , nem tinha pensado em usar arrays, é sompre bom aprender mais, vou guardar essas podem ser uteis mais pra frente
ViniGodoy
ribclauport:
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:
packagefood;importjava.util.DateFormatSymbols;importjava.util.Calendar;importjava.util.Locale;importjava.util.Scanner;publicclassMes{privateLocalelocaleUser;Mes(LocalelocaleUser){this.localeuser=localeUser;}publicStringgetMes(intmes){Stringmeses[]=newDateFormatSymbols(localeUser).getMonths();returnmeses[mes-1];}publicstaticvoidmain(String[]args){//Mes m = new Mes(new Locale("pt", "BR"));Mesm=newMes(newLocale("en","US"));Scanners=newScanner(System.in);System.out.println("Digiteonumerocorrespondenteaomês:");intnum=Integer.parseInt(s.nextLine());while(num!=0){if(num<1||num>12)System.out.println("Apenasmesesde1a12sãovalidos");elseSystem.out.println(m.getMes(num));num=Integer.parseInt(s.nextLine());}}}
É 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.
ribclauport
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: