Estou realizado o Curso Java Starter, pois tenho dificuldades bobas com esse início (while, switch,etc) e estou fazendo os exercícios aos poucos pra que possa amadurecer este conhecimento.
Gostaria da ajuda de vocês com o seguinte código:
Minha dúvida é a seguinte, pede-se pra poder solicitar um número repetidamente e dizer qual é o mês correspondente, e caso o número esteja fora do intervalo, mês inválido.
Isso acontece, mas esta correto?
Obrigado pela ajuda desde já.
packageexercicio5;importjava.util.Scanner;/** * * @author jean.carlos */publicclassMain{/** * @param args the command line arguments */publicstaticvoidmain(String[]args){/*05 - Implemente um programa que recebe repetidamente um número de 1 a12, enquanto esse número for diferente de 0 (zero), e imprime o mês correspondente.Quando o número estiver fora do intervalo permitido, a mensagem ?mês inválido?deverá ser exibida.*/Scannerentrada=newScanner(System.in);intnumero=0;while(numero!=0);{System.out.println("Informe um número para verificar o Mês Correspondente: ");numero=entrada.nextInt();switch(numero){case1:System.out.println("Janeiro");break;case2:System.out.println("Fevereiro");break;case3:System.out.println("Março");break;case4:System.out.println("Abril");break;case5:System.out.println("Maio");break;case6:System.out.println("Junho");break;case7:System.out.println("Julho");break;case8:System.out.println("Agosto");break;case9:System.out.println("Setembro");break;case10:System.out.println("Outubro");break;case11:System.out.println("Novembro");break;case12:System.out.println("Dezembro");break;default:System.out.println("Mês Inválido");}}}}
Seu programa nunca vai entrar no while deste jeito. Você precisa colocar o seguinte trecho de código antes do while:
System.out.println("Informe um número para verificar o Mês Correspondente: ");
numero = entrada.nextInt();
ou então;
int numero = 1; //OU QUALQUER NUMERO DIFERENTE DE 0
Pois no while vc está testando se é diferente de ZERO. Como voce atribuiu à variavel numero o valor 0, nunca executará. Você precisa ler o valor do usuário ou atribuir um valor inicial diferente de ZERO para que entre no while pelo menos uma vez.
J
jeancarlosaps
Retirei o ";" e coloquei o "System.out..." fora do while.
Mas a gora ele fica em um laço infinito... Por exemplo, digitei 5, e ele ficou aparecendo na saída Maio................................
packageexercicio5;importjava.util.Scanner;/** * * @author jean.carlos */publicclassMain{/** * @param args the command line arguments */publicstaticvoidmain(String[]args){/*05 - Implemente um programa que recebe repetidamente um número de 1 a12, enquanto esse número for diferente de 0 (zero), e imprime o mês correspondente.Quando o número estiver fora do intervalo permitido, a mensagem ?mês inválido?deverá ser exibida.*/Scannerentrada=newScanner(System.in);intnumero=0;System.out.println("Informe um número para verificar o Mês Correspondente: ");numero=entrada.nextInt();while(numero!=0){switch(numero){case1:System.out.println("Janeiro");break;case2:System.out.println("Fevereiro");break;case3:System.out.println("Março");break;case4:System.out.println("Abril");break;case5:System.out.println("Maio");break;case6:System.out.println("Junho");break;case7:System.out.println("Julho");break;case8:System.out.println("Agosto");break;case9:System.out.println("Setembro");break;case10:System.out.println("Outubro");break;case11:System.out.println("Novembro");break;case12:System.out.println("Dezembro");break;default:System.out.println("Mês Inválido");}}}}
Scannerentrada=newScanner(System.in);intnumero=1;while(numero!=0){System.out.println("Informe um número para verificar o Mês Correspondente: ");numero=entrada.nextInt();switch(numero){case1:System.out.println("Janeiro");break;case2:System.out.println("Fevereiro");break;case3:System.out.println("Março");break;case4:System.out.println("Abril");break;case5:System.out.println("Maio");break;case6:System.out.println("Junho");break;case7:System.out.println("Julho");break;case8:System.out.println("Agosto");break;case9:System.out.println("Setembro");break;case10:System.out.println("Outubro");break;case11:System.out.println("Novembro");break;case12:System.out.println("Dezembro");break;default:System.out.println("Mês Inválido");}}
J
jeancarlosaps
Galera, valew demais...
Juntei as informações e agora deu exatamente como queria...
Ainda tenho uma certa dificuldade com do-while, mas fazendo exercícios e logo logo arrumando um estágio e ralando pra valer, elas serão sanadas.
Por fim, o código ficou assim e exatamente como queria e como pedia:
Agora tem um outro que estava com a mesma dificuldade, vou tentar concertar com base no que vocês me passaram e qualquer nova dúvida posto aqui.
Obrigado pela paciência e ajuda.
packageexercicio5;importjava.util.Scanner;/** * * @author jean.carlos */publicclassMain{/** * @param args the command line arguments */publicstaticvoidmain(String[]args){/*05 - Implemente um programa que recebe repetidamente um número de 1 a12, enquanto esse número for diferente de 0 (zero), e imprime o mês correspondente.Quando o número estiver fora do intervalo permitido, a mensagem ?mês inválido?deverá ser exibida.*/Scannerentrada=newScanner(System.in);intnumero=1;while(numero!=0){System.out.println("Informe um número para verificar o Mês Correspondente ou 0 \npra sair do Sistema: ");numero=entrada.nextInt();switch(numero){case1:System.out.println("Janeiro");break;case2:System.out.println("Fevereiro");break;case3:System.out.println("Março");break;case4:System.out.println("Abril");break;case5:System.out.println("Maio");break;case6:System.out.println("Junho");break;case7:System.out.println("Julho");break;case8:System.out.println("Agosto");break;case9:System.out.println("Setembro");break;case10:System.out.println("Outubro");break;case11:System.out.println("Novembro");break;case12:System.out.println("Dezembro");break;default:System.out.println("Mês Inválido");case0:System.exit(numero);}}}}
J
jeancarlosaps
Pessoa, dentro do que está pedindo o enunciado, vê se tem alguma solução melhor:
/*08 - Escreva um programa que percorra dois laços de 0 a 10, um interno ao
outro, imprimindo os contadores, e quando estes forem iguais, o programa deve
passar à próxima interação do laço mais externo, caso contrário, deve imprimir os
valores dos contadores dos dois laços.*/
packageexercicio8;/** * * @author jean.carlos */publicclassMain{/** * @param args the command line arguments */publicstaticvoidmain(String[]args){/*08 - Escreva um programa que percorra dois laços de 0 a 10, um interno aooutro, imprimindo os contadores, e quando estes forem iguais, o programa devepassar à próxima interação do laço mais externo, caso contrário, deve imprimir osvalores dos contadores dos dois laços.*/for(intx=0;x<10;x++){System.out.println(x);for(inty=0;y<10;y++){if(x==y){break;}elseSystem.out.println("X: "+x+" e "+" Y: "+y);}}}}
cogumello
Não sei se ficaria melhor, mas outra opção seria colocar a comparação no próprio for:
for(int x=0; x<10; x++){
System.out.println(x);
for(int y=0; y<10 && x != y ; y++){
System.out.println("X: " + x + " e " + " Y: " + y);
}
}
jaspionTI
alex.bhte:
O que o jhaga falou está certo, mas você pode tentar com DO WHILE
Concordo com alex.bhte . Quando vc quiser que a aplicação entre pelo menos uma vez no laço é melhor usar do-while. Não que usar while nesse caso seja um erro, pq n é. Poém veja que vc forçou na linha 21 atribuindo o valor 1 para a variável número apenas para entrar no laço pq no while vc n tem o direito de testar pelo menos uma vez se a condição for falsa, diferente do do-while. do-while e while são estruturas de repetição que possuem mesma lógica, variando a situação. Fique tranquilo que vc aprender rápido. é só ficar ligado nessa “manha” :
do-while -->>Quando quero pelo menos entrar uma vez no laço
while–>> Quando não é preciso entrar pelo menos uma vez no laço
abraços e bons estudos =D
jaspionTI
cogumello:
Não sei se ficaria melhor, mas outra opção seria colocar a comparação no próprio for:
for(int x=0; x<10; x++){
System.out.println(x);
for(int y=0; y<10 && x != y ; y++){
System.out.println("X: " + x + " e " + " Y: " + y);
}
}
Concordo com vc cogumello. Acho que ficaria melhor.