Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Loop for aninhado utilizando uma variável verificadora

Estou resolvendo um exercício que tenho que verificar se um número está dentro de uma matriz. Eu resolvi criando uma variável verificador = 0 e se o número é encontrado, ele soma e sai do loop porque já não é mais zero (Sem o verificador ele continua no loop por causa do for aninhado). Porém, não sei se é a melhor solução porque parece que ficou muito complexo, não estou conseguindo ver uma solução melhor no momento. Se alguém puder opinar

import java.util.Scanner;

public class AcharNumeroDaLista {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);

        int[][] numeros = new int[2][5];

        for (int i = 0; i < numeros.length; i++) {
            for (int j = 0; j < numeros[i].length; j++) {
                System.out.println("Digite um número (máx. 100):");
                numeros[i][j] = sc.nextInt();
                if (numeros[i][j] > 100) {
                    throw new Exception("O valor deve ser menor que 100");
                }
            }
        }

        System.out.println("Agora entre com um número para saber se ele está contido na lista de números:");
        int numeroEscolhido = sc.nextInt();

        int verificador = 0;
        for (int i = 0; i < numeros.length; i++) {
            if (verificador != 0) {
                break;
            }
            for (int j = 0; j < numeros[i].length; j++) {
                if (numeros[i][j] == numeroEscolhido) {
                    System.out.println("O valor existe no conjunto");
                    verificador++;
                    break;
                } else if (i == (numeros.length - 1) && j == (numeros[i].length - 1)) {
                    System.out.println("--");
                }
            }
        }
    }
}
2 respostas
solução!

Sou iniciante, estou testando meus conhecimentos dando sugestão em posts.

    System.out.println("Agora entre com um número para saber se ele está contido na lista de números:");
    int numeroEscolhido = sc.nextInt();

    boolean achouNumero = false;

    for (int i = 0; i < numeros.length; i++) {
        for (int j = 0; j < numeros[i].length; j++) {
            if (numeros[i][j] == numeroEscolhido) {
                achouNumero = true;
                System.out.println("O numero existe no conjunto");
            } 
        }
    } 

    if ( !achouNumero ) {
        System.out.println("O numero não existe no conjunto");
    }

Você poderia utilizar uma variável boolean, assim como o Marcel, pois faz mais sentido nesse caso. A variável boolean é mais utilizada nesses casos pois só pode ser verdadeira ou falsa, diferente do int que pode assumir diversos valores.

O único detalhe da implementação do Marcel é que o algoritmo vai continuar percorrendo a matriz, mesmo após encontrar o número escolhido. Dependendo da aplicação e da necessidade, isso pode significar uma perda considerável de performance.