While com Loop infinito [Resolvido]

Prezados estou começando o meu aprendizado em Java. Entretano, o programa abaixo esta entrando em um loop infinito.
Onde estou errando ?

[quote]import java.util.Scanner;

public class DiasSemana2 {

/**
 * Esse programa le um numero do teclado e retorna
 * o dia da semana identico ao programa DiasSemana mas usando um laço de repetição
 * enquanto o número for diferente de 0 (zero)
 *
 * esse programa le um numero e retorna o dia da semana:
 * 1 - Domingo
 * 2- Segunda-feira
 * 3- terça-feira
 * 4- quarta-feira
 * 5- quinta-feira
 * 6- sexta-feira
 * 7- sabado
 *
 */


public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	//lendo um valor do teclado
	Scanner ler = new Scanner(System.in);
	
	//lendo um valor do teclado
	System.out.println("Digite um valor de 1 a 7");
	System.out.println("----------------------->");
	String numero = ler.nextLine();
	
	//convertendo a String para um valor inteiro
	int numero1 = Integer.parseInt(numero);
	
	while(numero1 != 0){
		
							
			if(numero1 == 1){
				
				System.out.println("Domingo");
			}	
			
			
			else
			if(numero1 == 2){
				
				System.out.println("Segunda-feira");
			}
			
			
			else
			if(numero1 == 3){
				
				System.out.println("Terca-feira");
			}
			
			else
			if(numero1 == 4){
				
				System.out.println("Quarta-feira");
				
			}
			
			else
			if(numero1 == 5){
				
				System.out.println("Quinta-feira");
				
			}
			
			else
			if(numero1 == 6){
				
				System.out.println("Sexta-feira");
			}	
			
			
			else
			if(numero1 == 7){
			
				System.out.println("Domingo");
							
			}
			
			
			
			else 
			if(numero1 == 0){
				
				System.out.println("Finalizando");
				break;
			
			}
			
			
			else{
				
				System.out.println("Digite um valor entre 1 e 7 \n ou digite 0 para terminar!");
				
			} 
		
		
						
	}
	
	
}

}
[/quote]

Comece trocando a tag quote por code

usa o switch…case

boa noite, vou fazer alguns comentários, espero que sirva de dica, para melhor visualização no fórum, coloque sempre o código dentro das tags Code, depois quando for algum código com muitos ifs, tente reduzi-los para ficar de fácil leitura…
Quanto ao código, seu erro foi que você está pedindo para o usuário digitar os dados fora do loop, ou seja, o valor que ele digitar será sempre uma constante, ai o laço será sempre infinito, estou postando seu código, com algumas modificações, espero ter ajudado…

[code]import java.util.Scanner;

public class Pessoa {

/* 
 * Esse programa le um numero do teclado e retorna 
 * o dia da semana identico ao programa DiasSemana mas usando um laço de repetição 
 * enquanto o número for diferente de 0 (zero) 
 * 
 * esse programa le um numero e retorna o dia da semana: 
 * 1 - Domingo 
 * 2- Segunda-feira 
 * 3- terça-feira 
 * 4- quarta-feira 
 * 5- quinta-feira 
 * 6- sexta-feira 
 * 7- sabado 
 * 
 */
public static void main(String[] args) {

//lendo um valor do teclado
Scanner ler = new Scanner(System.in);
//lendo um valor do teclado
//convertendo a String para um valor inteiro
// não precisa converter para um valor inteiro, simplesmente use ler.nextInt();

     int numero1 =  1;// declarei a int numero fora do laço para não cair em loop e dar erro
    
      while (numero1 != 0) {
        System.out.println("Digite um valor de 1 a 7");
        System.out.println("----------------------->");
      numero1 = ler.nextInt();// aqui vem o segredo, pois a variável numero1 está recebendo outro valor, ou seja, a cada passada do loop, esse valor será mudado

        if (numero1 == 1) {
            System.out.println("Domingo");
        } else if (numero1 == 2) {
            System.out.println("Segunda-feira");
        } else if (numero1 == 3) {
            System.out.println("Terca-feira");
        } else if (numero1 == 4) {
            System.out.println("Quarta-feira");
        } else if (numero1 == 5) {
            System.out.println("Quinta-feira");
        } else if (numero1 == 6) {
            System.out.println("Sexta-feira");
        } else if (numero1 == 7) {
            System.out.println("Domingo");
        } else {System.out.println("Digite um valor entre 1 e 7 \n ou digite 0 para terminar!");}

}
}
}
[/code]

Olá Tigre[BR]

O problema é que você está lendo um valor do teclado uma unica vez. Tente por esse seu trecho de código dentro do while:

[code]//lendo um valor do teclado
System.out.println(“Digite um valor de 1 a 7”);
System.out.println("----------------------->");
String numero = ler.nextLine();

//convertendo a String para um valor inteiro
int numero1 = Integer.parseInt(numero);[/code]
Assim, seu programa vai requisitar uma nova entrada ao usuário a cada iteração pelo loop while.

Seguindo as recomendações do drsmachado e Erick Ribeiro segue abaixo o seu programa, só que entre as tags “code … /code” e utilizando a instrução switch case em vez de if else

Qualquer dúvida com relação ao codigo (tipo o que significa switch case e porque preferi-lo ao invês de if else), digite a palavra que vc não conhece no google, seguido de java e terá muitos links explicando detalhadamente cada um…

[code]import java.util.Scanner;

public class DiasSemana {

public static void main(String[] args) {

    int dia;
    Scanner scan = new Scanner(System.in);

    do {
        System.out.println("Digite um valor de 1 a 7");
        System.out.println("----------------------->");
        try {
            dia = Integer.parseInt(scan.nextLine().trim());
        } catch (NumberFormatException ex) {
            System.out.println("Entrada inválida");
            dia = 0;
        }

        switch (dia) {
            case 0:
                System.out.println("Finalizando");
                continue;
            case 1:
                System.out.println("Domingo");
                break;
            case 2:
                System.out.println("Segunda-feira");
                break;
            case 3:
                System.out.println("Terca-feira");
                break;
            case 4:
                System.out.println("Quarta-feira");
                break;
            case 5:
                System.out.println("Quinta-feira");
                break;
            case 6:
                System.out.println("Sexta-feira");
                break;
            case 7:
                System.out.println("Sábado");
                break;
            default:
                System.out.println("Digite um valor entre 1 e 7 \n ou digite 0 para terminar!");
                break;
        }
    } while (dia != 0);
}

}[/code]
Obs. 1: No seu código, você esqueceu de comparar o sábado, dá uma olhada lá, em vez disso, você compara o domingo duas vezes.

Obs. 2: Utilizei o “do … while” para ficar mais facil de ler o programa neste seu caso em específico.

Obs. 3: A estrutura try catch que pus no código acima é um tratamento de exceção da linguagem, qualquer dúvida quanto a ela, procure sobre “tratamentos de exceções em java” no google que também tem muito link bom para aprender. essas estruturas podem parecer novas agora, mas se você pretende realmente aprender java, vai ter que aprender o que elas fazem de um jeito ou de outro mesmo…

espero ter ajudado =D

Foi mal DaniloZagato

Eu fiquei enrolando aqui formatando a minha resposta e nem vi que vc ja tinha tirado a duvida do nosso amigo.

desculpa aee :smiley:

De Outra Maneira… bem mais facil…eu acho… e evitando tratamento de exceções…

public static void main(String[] args) { 
	
	boolean b = false; 
	
	Scanner ler = new Scanner(System.in); 
	String numero;
		
	do{			
		System.out.println("Digite um valor de 1 a 7"); 
	    System.out.print("------> "); 
	    numero = ler.nextLine(); 
	    
        b = numero.matches("[1234567]");		
		
	}while(b == false);	
	
	char opcao = numero.charAt(0);
	
	switch(opcao){                
        
	case '1':
		      System.out.println("Domingo");
		      break;		      
	case '2':
	          System.out.println("Segunda - Feira");
	          break;
	case '3':
	          System.out.println("Terca - Feira");
	          break;
	case '4':
	          System.out.println("Quarta - Feira");
	          break;
	case '5':
	          System.out.println("Quinta - Feira");
	          break;
	case '6':
	          System.out.println("Sexta - Feira");
	          break;
	case '7':
	          System.out.println("Sabado");
	          break;   	
	   }	
	}
}

Hehehee Boa boa andy11x

No final das contas, expressões regulares sempre salvam nosso dia! (ou não para quem não conhece né hauhauhaua)

pra ficar mais elegante ainda, a lista da ER poderia ficar assim né:

b = numero.matches("[1-7]");

Mas acho que nosso amigo Tigre[BR] quer passar várias vezes pelo loop digitando os números correspondentes aos dias da semana em uma unica execução do programa e também ter a opção de finalizar (dia == 0), mas até ai tudo bem, é só incrementar mais um loop no código e fica tudo blz!

Valeu lembrar das boas e não tão velhas regex :smiley:

e para quem não conhece, fica ai uma boa recomendação de aprendizado, Expressões Regulares!
Segue link para o site do mestre Jedi em regex Aurelio Marinho Jargas
http://aurelio.net/regex/guia/

Caros amigos agradeço a atenção e o tempo que perderam para me ajudar com esse programa e em especial aos amigos DaniloZagato e thiagof pelos esclarecimentos.

Muito obrigado :stuck_out_tongue:

Pode sempre contar com o pessoal do GUJ Tigre[BR] :smiley:

só não esquece de marcar o tópico com um [RESOLVIDO] no titulo

Até mais!