Como comparar valores dentro de um vetor só usando método "for" em Java?

Tenho um programa de lógica cujo enunciado diz o seguinte:

“O usuário deve informar a quantidade de alunos da turma via teclado, o nome da matéria e a quantidade total de aulas (numérico inteiro positivo) no início do programa. O usuário agora vai informar matrícula, nome, média final e quantidade de faltas (numérico inteiro positivo). O programa deve validar os dados e ao final mostrar o boletim de todos os alunos inseridos com a informação de aprovado ou reprovado. O aluno é considerado APROVADO se tiver a média igual ou superior a 6,0 e no mínimo 75% de presença.”

Consegui escrever o código todo, mas o único problema (e crucial) que resta é validar as matrículas, ou seja, fazer com que não haja matrículas repetidas, e elas estão todas num vetor, sendo necessário verificar todos os números que lá se encontram. Já pesquisei e encontrei umas respostas bem complicadas, no entanto, como fiz todo o programa usando lógica, não busco um método pronto, até porque são complicados de entender. Algo como usar somente o “for” seria bem útil.

Segue o código (sem a comparação de valores):

public static void main(String[] args) {

	Scanner scanInt = new Scanner(System.in);
	Scanner scanString = new Scanner(System.in);
	Scanner scanDouble = new Scanner(System.in);

	int cont = 0, quantAulas = 0, quantAlunos = 0, i, faltasMaximo = 0;
	String nomeMateria;

	System.out.println("Digite a quantidade de alunos:");

	while (quantAlunos < 1) {

		if (cont > 0) {
			System.out.println("Valor inválido; reentre um maior que 0:");
		}

		quantAlunos = scanInt.nextInt();

		cont++;
	}

	cont = 0;

	int alunos[] = new int[quantAlunos];
	int matricula[] = new int[quantAlunos];
	int quantFaltas[] = new int[quantAlunos];
	double mediaFinal[] = new double[quantAlunos];
	String nome[] = new String[quantAlunos];
	String resultado[] = new String[quantAlunos];

	System.out.println("Nome da matéria:");

	nomeMateria = scanString.nextLine();

	System.out.println("Quantidade de aulas:");

	while (quantAulas < 1) {

		if (cont > 0) {
			System.out.println("Valor inválido; reentre um maior que 0:");
		}

		quantAulas = scanInt.nextInt();

		cont++;
	}

	faltasMaximo = quantAulas / 4;

	for (i = 0; i < quantAlunos; i++) {

		cont = 0;

		System.out.println("Informe o número de matrícula do " + (i + 1) + "º aluno:");

		while (matricula[i] < 1) {

			if (cont > 0) {
				System.out.println("Valor inválido; reentre um maior que 0:");
			}

			matricula[i] = scanInt.nextInt();

			cont++;
		}

		cont = 0;

		System.out.println("Agora digite o nome do " + (i + 1) + "º aluno:");

		nome[i] = scanString.nextLine();

		System.out.println("Média final:");

		mediaFinal[i] = scanDouble.nextDouble();

		while (mediaFinal[i] < 0 || mediaFinal[i] > 10) {

			System.out.println("Valor inválido; reentre um entre 0 e 10:");

			mediaFinal[i] = scanDouble.nextDouble();

		}

		System.out.println("Quantidade de faltas:");

		quantFaltas[i] = scanInt.nextInt();

		while (quantFaltas[i] < 0) {

			System.out.println("Valor inválido; reentre um maior ou igual a 0:");

			quantFaltas[i] = scanInt.nextInt();

		}

		if (quantFaltas[i] <= faltasMaximo) {

			if (mediaFinal[i] >= 6) {
				resultado[i] = "Aprovado";
			} else {
				resultado[i] = "Reprovado por nota";
			}
		} else {
			resultado[i] = "Reprovado por faltas";
		}

	}

	scanInt.close();
	scanString.close();
	scanDouble.close();

	for (i = 0; i < alunos.length; i++) {
		System.out.println("\nInformações do " + (i + 1) + "º aluno:\n Matrícula: " + matricula[i] + "\n Nome: "
				+ nome[i] + "\n Média Final: " + mediaFinal[i] + "\n Faltas: " + quantFaltas[i] + "\n Situação: "
				+ resultado[i] + " em " + nomeMateria);
	}

Faça um for varrendo esse array, logo em seguida vc faz um if veridicando se o num[objdofor] é = ao texto digitado.

Creio que a logica seja essa

Pelo que entendi você quer inserir matriculas em um vetor, e essas matriculas não podem ser repetidas.

se for isso é só você verificar na hora que vai inserir a matricula se já existe, sendo assim:

    int matricula = 2546;
    for (int i = 0; i < vetor.length; i++) {
        if (matricula == vetor[i]) {
            JOptionPane.showMessageDialog(null, "Já Existe!");
        break;
        }
    }

Pudera ser tão fácil! Só que se fosse dessa forma eu teria de atribuir cada valor digitado no vetor (lembre-se que é o usuário que digita cada número de matrícula e ele também delimita a quantidade de alunos, ou seja, o tamanho do vetor) a uma variável e compará-la com os demais valores. Não há como saber quantos serão, e a comparação, digamos, do 3º valor em um vetor de 10 posições tem de ser com o 1º e o 2º (0 e 1, respectivamente), em tempo de digitação, antes mesmo de ser digitado o valor seguinte. Meio paradoxal pensar assim, já que a comparação seria algo como "if (matricula[i] == matricula[i]. Ainda (há um bom tempo) estou a tentar resolver, adicionando uma variável num “for” que mude a cada laço.

Boa tarde,

Crie uma class “Aluno” com os atributos matrícula, nome, média final e quantidade de faltas
Trabalhe com Map. do tipo Map<Integer, Aluno>, onde a Integer seria o numero da Matricula.
na hora da validação voce faz um containsKey

Orientação a Objetos é uma maravilha, eu faria desse jeito se pudesse. Entretanto é um exercício de lógica, tem-se que desenvolver um raciocínio dentro daquela classe “linguição”. E métodos prontos não ajudam a entender direito. Continuo a tentar com “for”.

Atualmente estou neste nível:

if (i > 0) {

				for (j = 1; j < (i + 1); j++) {

					while (matricula[i] == matricula[i - j]) {
						System.out.println("O valor digitado para matrícula já existe. Tente novamente:");

						matricula[i] = scanInt.nextInt();
					}
				}
			}

Mas o while funciona respondendo que o valor já existe até chegar a outra casa. Por exemplo: matricula[0] = 1, matricula[1] = 2. Se para a matrícula [2] eu digitar 2 a mensagem de que já existe é mostrada, mas se eu digitar 1 o programa entende que matricula[2] jé é diferente de matricula[1], e se eu pular pra matricula[0] e digitar “2” de novo, passa direto, porque o valor é diferente de matricula[0], independente do valor de matricula[1].

Crie entao uma variavel chamada matriculaCadastrada[quantAlunos] e add cada matricula digitada la.
depois faça um for lendo e matriculaCadastrada e validando com o novo valor de matricula inserido.

Tipo isso aqui abaixo.

int matriculaCadastrada = new int[quantAlunos];


while (matricula[i] < 1) {
      if (cont > 0) {
          System.out.println("Valor inválido; reentre um maior que 0:");
     }
     int mat = scanInt.nextInt();
     if(matriculaCadastrada.length == 0){
       matricula[i] = mat;
       matriculaCadastrada[i] = mat;
     }else{
       for(int i = 0; i < matriculaCadastrada.length; i++){
         if(matriculaCadastrada[i] == mat){
           System.out.println("Matricula ja cadastrada, Digite outro valor.");
           mat = scanInt.nextInt();
           i = 0;
         }
       }
       matricula[i] = mat;
       matriculaCadastrada[i] = mat;
     }
     
     cont++;
}

1 curtida

Caramba, deu certo! Infelizmente não segui tua lógica; não que eu não tenha entendido, seria talvez mais simples comparar 2 vetores (não sei), embora teu código tenha tido um problema (ali no if(matriculaCadastrada.length == 0), porque essa condição nunca será verdadeira: matriculaCadastrada.length == quantAlunos, e para esta variável já há um while garantindo que ela deve ser maior que 0, lá no começo do código). Mas a grande sacada que deu certo foi teu i = 0;, que reiniciou a variável. Apliquei isso na variável j e ficou assim:

`if (i > 0) {

			for (j = 1; j < (i + 1); j++) {

				while (matricula[i] == matricula[i - j]) {
					System.out.println("O valor digitado para matrícula já existe. Tente novamente:");

					matricula[i] = scanInt.nextInt();
					
					j = 1;
				}
			}
		}`

Sendo assim, a cada leitura do while, se a condição for verdadeira e passar direto, não pula para a próxima casa do vetor, repercorre-o desde o começo.

Muito obrigado, eu já estava até tentando criar mais umas estruturas de repetição para colocar a condição no começo a cada entrada.

Problema resolvido!