O código não lê o "if", apenas o "else"

5 respostas
H

galera, eu to fazendo esse exercício aqui: "Faça um programa em Java que leia 10 números inteiros e os armazene em um vetor. Depois solicite ao usuário um número inteiro qualquer, o programa deverá verificar se o número informado está contido no vetor, caso esteja informar a posição em que ele se encontra, caso contrário escrever ?Número não encontrado?. Crie um método para verificar isso."

Mas o meu código não tá lendo o "if", sempre cai no "else"... acho que a variável do meu for está errada, alguém pode me informar o que está errado na compilação? Como eu não sei como mostrar a posição do número do vetor, eu apenas mostrei o número, se alguém puder me informar também como mostar a posição do número ficarei ainda mais agradecido.

public class Ex3 {

    static int x[];

    public static void main(String[] args) {

        String aux = JOptionPane.showInputDialog("Digite a quantidade de números: ");
        int qtd = Integer.parseInt(aux);
        x = new int[qtd];

        for (int i = 0; i < x.length; i++) {
            String num = JOptionPane.showInputDialog("Digite os " + qtd + " números: ");
            x[i] = Integer.parseInt(num);
        }

        int numRandom = Integer.parseInt(JOptionPane.showInputDialog("Digite um número qualquer: "));
        for (int i = 0; i < x.length; i++) {
            if (numRandom == x[i]) {
                JOptionPane.showMessageDialog(null, "O número " + numRandom + " é válido.");
               
            } else {
                JOptionPane.showMessageDialog(null, "Número não encontrado.");
                break;
            }
        }
    }
}

5 Respostas

leofariasrj25

Seu código tem erros de lógica, o programa so deveria me informar que o número não foi encontrado depois ter analisado todas as posições
do vetor, do forma que está se ele não encontrar o número logo na primeira posição ele cai no else e o programa termina por causa do break.

E além disso um número pode aparecer mais de uma vez no mesmo vetor, então o programa deveria me dizer quais são estas posições.

Logo a primeira coisa a fazer é: receber o número, analisar todos as posições e ir armazenando em uma array auxiliar o número das
posições que aquele número se encontra.

Faça as modificações e depois poste aqui o resultado.

fabiocortolan
boolean encontrado = false;

for (int i = 0; i &lt; x.length; i++) {  
    if (numRandom == x[i]) {  
        JOptionPane.showMessageDialog(null, "O número " + numRandom + " é válido.\n" +
                                                                + "A posição do número é " + i); // o "i" mostra a posição atual do número no vetor, por isso vc coloca x[i] para percorrê-lo           

        encontrado = true; // variável para indicar se o número foi encontrado

    // Remova as próximas 3 linhas, caso contrário se o número não estiver na primeira posição  vai cair no else e parar o laço no break
//    } else {  
//        JOptionPane.showMessageDialog(null, "Número não encontrado.");  
//        break;  
    }

    // Aqui vc verifica se o número não foi encontrado e mostra a mensagem. 
    if (!encontrado) JOptionPane.showMessageDialog(null, "Número não encontrado.");
}

Obs.: nesse código será mostrada uma mensagem para cada número encontrado, se quiser melhorar o código faça como disse o leofariasrj25 e utilize um array para armazenar as posições (nesse caso aconselho o ArrayList())

A

Bom dia hdrzX!

Algo simples, mas que pode te ajudar também é seguir o enunciado do exercício. Se o enunciado diz ‘…10 números inteiros…’ faça um vetor de 10 posições e não pergunte ao usuário quantos números ele quer ler.

Isso vale para outras situações, não dê liberdade ao usuário, pois quanto mais se amplia o escopo, mas bobagens o usuário poderá fazer

H

Um amigo meu me ajudou e fiz dessa forma:

public class Ex3 {

    static int x[];

    public static void main(String[] args) {

        String aux = JOptionPane.showInputDialog("Digite a quantidade de números: ");
        int qtd = Integer.parseInt(aux);
        x = new int[qtd];

        for (int i = 0; i < x.length; i++) {
            String num = JOptionPane.showInputDialog("Digite os " + qtd + " números: ");
            x[i] = Integer.parseInt(num);
        }

        int numRandom = Integer.parseInt(JOptionPane.showInputDialog("Digite um número qualquer: "));
        verificaNumero(x, numRandom);
    }

    public static void verificaNumero(int[] x, int numeroRandom) {
        int flag = 0;
        for (int i = 0; i < x.length; i++) {
            if (x[i] == numeroRandom) {
                JOptionPane.showMessageDialog(null, "O número "+ numeroRandom+ " está na posição " + i + " do vetor");
                flag = 1;
                break;
            }
        }
        if (flag == 0) {
            JOptionPane.showMessageDialog(null, "O número "+ numeroRandom+ " não foi encontrado");
        }
    }
}

Eu deixo pro usuário digitar a quantidade de números pra eu ficar executando o programa e testando, pra não precisar digitar 10 números toda hora... valeu pela ajuda.

A

Apenas para os testes, eu sugiro usares um vetor já preenchido, só pra poupares a tua digitação. Depois que o processamento estiver legal, libera a digitação.

Criado 21 de junho de 2013
Ultima resposta 25 de jun. de 2013
Respostas 5
Participantes 4