Ajuda Exercícios Java

Bom dia Pessoal,

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á.

[code]package exercicio5;
import java.util.Scanner;
/**
*

  • @author jean.carlos
    */
    public class Main {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {

      /05 - Implemente um programa que recebe repetidamente um número de 1 a
      12, 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.
      /

      Scanner entrada = new Scanner(System.in);

      int numero = 0;
      while(numero != 0);{
      System.out.println("Informe um número para verificar o Mês Correspondente: ");
      numero = entrada.nextInt();

       switch (numero){
      
           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("Mês Inválido");
       }
      

      }

    }

}
[/code]

Retire o ; que há após o while.

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.

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…

[code]package exercicio5;
import java.util.Scanner;
/**
*

  • @author jean.carlos
    */
    public class Main {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {

      /05 - Implemente um programa que recebe repetidamente um número de 1 a
      12, 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.
      /

      Scanner entrada = new Scanner(System.in);

      int numero = 0;

      System.out.println("Informe um número para verificar o Mês Correspondente: ");
      numero = entrada.nextInt();

      while(numero != 0){

       switch (numero){
      
           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("Mês Inválido");
       }
      

      }

    }

}
[/code]

Jean, tente assim:

...
int numero = 1 // atribui o valor 1 e nao zero inicialmente

while (numero !=0 ){ // enquanto o numero for diferente de 0

System.out.println...

switch(numero){

case 0:
System.exit(0);
...

O resto está correto, tenta aí e retorna.

O que o jhaga falou está certo, mas você pode tentar com DO WHILE

do{
    System.out.print...
    switch..
}while(numero != 0);

faz assim

Scanner entrada = new Scanner(System.in);  
  
        int numero = 1;  
           
        while(numero != 0){  

            System.out.println("Informe um número para verificar o Mês Correspondente: ");  
            numero = entrada.nextInt(); 
  
            switch (numero){  
  
                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("Mês Inválido");  
            }  
        }  

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.

[code]package exercicio5;
import java.util.Scanner;
/**
*

  • @author jean.carlos
    */
    public class Main {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {

      /05 - Implemente um programa que recebe repetidamente um número de 1 a
      12, 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.
      /

      Scanner entrada = new Scanner(System.in);

      int numero = 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){
      
           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("Mês Inválido");
      
           case 0:
               System.exit(numero);
       }
      

      }

    }

}
[/code]

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.
/

[code]package exercicio8;

/**
*

  • @author jean.carlos
    */
    public class Main {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      /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.
      /

      for(int x=0; x<10; x++){
      System.out.println(x);
      for(int y=0; y<10;y++){
      if(x==y){
      break;
      }else
      System.out.println("X: " + x + " e " + " Y: " + y);
      }
      }
      }

}[/code]

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

[quote=alex.bhte]O que o jhaga falou está certo, mas você pode tentar com DO WHILE

do{ System.out.print... switch.. }while(numero != 0); [/quote]

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

[quote=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); } }
[/quote]

Concordo com vc cogumello. Acho que ficaria melhor.

E porque não assim?

   for(int y=0; y < x ; y++){