Ajuda Exercícios Java

12 respostas
J

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

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


    }

}

12 Respostas

ErickRAR

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

M

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

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

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


    }

}
jhaga

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.

A

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

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

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

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.

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


    }

}
J

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

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

}
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

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

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.

pmlm

E porque não assim?

for(int y=0; y < x ; y++){
Criado 25 de julho de 2012
Ultima resposta 26 de jul. de 2012
Respostas 12
Participantes 9