Programação (java)

Ler uma matriz 6x6 (certifique que não serão informados valores duplicados). A seguir ler um número X e escreva um procedimento que recebe o número informado e emite uma mensagem indicando se
o valor de X existe ou NÃO na matriz.

Qual é sua dúvida, posta código que já fez.

1 curtida

Opa!!
Então… eu não estou conseguindo fazer com que não duplique nenhum número na hora de sortear. Eu estava pensando em fazer de um modo que eu escolha quais os números eu quero colocar na matriz e não utilizar sorteio, assim não preciso me preocupar com repetição.

public static void main(String[] args) {

        int mat[][] = new int[6][6];
        for (int x = 0; x < 6; x++) {
            for (int y = 0; y < 6; y++) {
                mat[x][y] = (int) (Math.random() * 36);

            }

        }
        for (int x = 0; x < 6; x++) {
            for (int y = 0; y < 6; y++) {
                System.out.print(mat[x][y] + "\t");

            }
            System.out.println("");

        }

    }
}

Falta só a parte para não duplicar nenhum número e mostrar na tela se o número que eu digitar está na matriz ou não.

Acho que forma mais fácil é criar um vetor e um contador para os elementos que já foram adicionados, e adicionar os valores também nesse vetor, assim na hora de verificar se o número já está presente você não precisa se preocupar com linhas e colunas, apenas com o número de elementos que já foram inseridos.

Mas a forma mais adequada seria criando um método que receba a matriz, um número indicando até onde deve ser feita a pesquisa e o valor a ser pesquisado, nesse método, use um contador para contar o número de posições já pesquisadas, e interrompa os 2 fors, simplesmente mudando o valor de cada contador, nesse caso o mesmo método pode ser usado para procurar X.

Para não se repetir eu coloquei um sorteio de até 5000, a chance de sortear 36 números entre 5000 e se repetir é quase nula. Acho que tá bom.

public static void main(String[] args) {

    int numero = Entrada.leiaInt("Digite um numero");
    if (numero <= 5000) {
        Entrada.escrever("O numero está na matriz");
    } else {
        Entrada.escrever("O numero nao está na matriz");
    }
    int mat[][] = new int[6][6];
    for (int x = 0; x < 6; x++) {
        for (int y = 0; y < 6; y++) {
            mat[x][y] = (int) (Math.random() * 5000);
        }
    }
    for (int x = 0; x < 6; x++) {
        for (int y = 0; y < 6; y++) {
            System.out.print(mat[x][y] + "\t");
        }
        System.out.println("");
    }
}

}

O enunciado diz que deves ler uma matriz, não gerar a matriz com números aleatórios.

Na tua solução, alem de estares a gerar a matriz com números aleatórios (que podem estar repetidos), não estás a verificar em lado nenhum se o teu número existe na matriz.

Já agora, e por curiosidade, se precisas mesmo de ter n números random de um universo m, sem repetições, e se esse universo não é exageradamente grande, a melhor forma é baralhar todo o universo e escolher os primeiros n números.

 List<Integer> universo = IntStream.rangeClosed(1, 100)
            .boxed().collect(Collectors.toList());  // cria universo, neste caso com numeros até 100
    Collections.shuffle(universo); // baralha os números
    Iterator<Integer> it = universo.iterator(); // cria um iterator para ser mais facil aceder
    int random = it.next(); // as proximas 100 vezes que usares it.next() terás um numero random diferente entre 1 e 100

È que realmente não estou achando em nenhum lugar como fazer, não tem nada parecido e quando tem, é usando códigos que eu ainda não aprendi. Tenho que apresentar este trabalho hoje, e se por acaso eu usar alguma coisa que não foi ensinado, não vou conseguir explicar, caso o professor pergunte alguma coisa relacionado a eles. Esse foi o melhor que deu pra fazer, com certeza vou perder uns pontos, mas fazer o que =\

Agora fico bom :slight_smile:

public static void main(String[] args) {

    int numero = Entrada.leiaInt("Digite um numero");
    if (numero <= 35) {
        Entrada.escrever("O numero está na matriz");
    } else {
        Entrada.escrever("O numero NAO está na matriz");
    }

    final int linhas = 6;
    final int colunas = 6;
    int[][] num = {{0, 1, 2, 3, 4, 5}, {6, 7, 8, 9, 10, 11}, {12, 13, 14, 15, 16, 17}, {18, 19, 20, 21, 22, 23}, {24, 25, 26, 27, 28, 29}, {30, 31, 32, 33, 34, 35}};
    for (int l = 0; l < linhas; l++) {
        for (int c = 0; c < colunas; c++) {

        }
    }
    for (int l = 0; l < linhas; l++) {
        for (int c = 0; c < colunas; c++) {
            System.out.printf("%2d |", num[l][c]);
        }
        System.out.println("");
    }
}

}

Como ficou bom? Em lado nenhum estás a comparar o número com os valores da matriz!

E não estás a ler a matriz, estás a inventar uma, não é isso que pede o enunciado!

E se digitar um número negativo? Vai dizer que está na matriz…

O enunciado diz para ler a matriz, então deveria ser algo como:

for (int l = 0; l < linhas; l++) {
    for (int c = 0; c < colunas; c++) {
        mat[l][c] = Entrada.leiaInt("Digite o número da linha " + l + ", coluna " + c);
    }
}

Depois, vc tem que fazer outro loop para verificar se o numero está na matriz.