Try com loop infinito

6 respostas
blacksilva

Galera to com um problema aqui procurei na net ja e tu mas, nao achei nada que resolvesse meu problema na hora que o usuário digita uma letra o programa informa “Informe apenas numeros” porém ele entra em um loop infinito e eu nao sei como parar. Bom vejam o codigo ae.

import java.util.InputMismatchException;
import java.util.Scanner;
public class Questao1 {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        int A[] = new int[10];
        int b[] = new int[10];
        int cont = 0;
        boolean flag = false;
        while(!flag){
        try{
            System.out.println("Informe 10 valores para o vetor!");
            for (int i = 0; i < A.length; i++) {
                A = teclado.nextInt();
                if (A <= 0) {
                    b [i]= A[i];
                    cont++;
                }// fim do if
            }// fim do for
            for (int j = 0; j < 10; j++) {
                System.out.println("Valores no vetor A: " + A[j]);
            }// fim do for
            System.out.println("-----------------------------------------");
            for (int l = 0; l < cont; l++) {
                System.out.println("Valores no vetor B: " + b[l]);
            }// fim do for
        } catch (InputMismatchException e) {
            System.out.println("Informe apenas numeros!");
             flag = false;// para ter certeza.
        }// fim do catch
        }// fim do while
    }// fim do metodo
}// fim do progroma

6 Respostas

Chaybelucas

Cara, tá MUITO difícil de ler. Antes do primeiro import, coloca [code] e coloca a mesma tag no final do código com uma barra / antes do "code". Pelo menos fica mais legível. Não faço aqui, senão o que escrevi fica estranho. Mas é só usar isso aqui >>> code] [/code
Mas com os colchetes direitinho

**SEGUINTE CARA**
Teu loop tá dizendo que enquanto for diferente da flag, que no caso é false, teu programa vai fazer o que tu mandou. Acontece que não tem nada dizendo que ela vai ser verdadeira ou falsa. Tu só afirma que ela vai ser falsa no final, ou seja, vai ficar dando loop mesmo

blacksilva

porem cara se eu colocar flag = true;

ele finaliza o programa, e nao é pra finalizar e sim dizer a mensagem e continuar da onde parou o vetor. Sem resetar ele.

Chaybelucas

Sim, sim, mas é este o ponto!
Você define, dentro do seu loop, quando ele vai encerrar. Dentro do loop, em algum lugar, sua variavel flag tem que estar recebendo true! Senão é lógico que vai ficar com loop infinito!

Ou cê pode criar uma pergunta do tipo "deseja encerrar aqui? \n0-Sim \n1-Não" e verificar. Se a resposta for, por exemplo, 0 então a flag=true e pronto, seu programa é encerrado. Senão, flag=false e seu programa continua no loop

O que falta é o controle

ERRO

Troque flag para true e tire o operador de negação.

R

Em baixo do ultimo for e antes do catch, coloque

flag = true;

assim:

...
            for (int l = 0; l < cont; l++) {
                System.out.println("Valores no vetor B: " + b[l]);
            }// fim do for
            flag = true;
        } catch (InputMismatchException e) {
            System.out.println("Informe apenas numeros!");
             flag = false;// para ter certeza.
        }
....
Moraisdelimahigor

Cara, tenta usar a instrução break

Criado 16 de novembro de 2016
Ultima resposta 17 de nov. de 2016
Respostas 6
Participantes 5