Erro na comparação

7 respostas
Paulo_Mour

Boa tarde a todos,

Estou criando um aplicativo para ler o nome e 5 notas dos alunos. Feito isto, o programa deveria comparar o gabarito com as respostas dos alunos e informar o nº de questões que este aluno acertou, mas o programa não está fazendo esta comparação. Alguém poderia me ajudar ?

Antecipadamente agradecido,

import corejava.Console;
import java.util.Scanner;

public class GabaritoDeProva
{
	public static void main (String[] args)
	{
		Scanner entrada = new Scanner(System.in);
		
		int gabOficial[] = {3, 1, 5, 2, 4};		
		int gabAluno[] = new int[6];
		int i, j, numAcertos = 0, resultado = 0;
		
		
		for(i = 1 ; i < 6 ; i++)
		{
			
				String nomeAluno = Console.readLine("Informe o nome do " + i + "º aluno: ");
			
				for(j = 1 ; j < 6 ; j++)
				{
					System.out.printf("Digite a %dª nota do aluno %s: ", j, nomeAluno);
					gabAluno[j] = entrada.nextInt();
					
					if(gabAluno[j] == gabOficial[i])
					{
						numAcertos += 1;
						resultado += numAcertos;
					}
				}
				
				System.out.print("\nGabarito oficial: ");
				for(int gab : gabOficial)
				{
					System.out.printf("%s ", gab);
				}
				
				System.out.print("\nGabarito do aluno: ");
				for(j = 1 ; j < gabAluno.length ; j++)
				{
					System.out.printf("%s ", gabAluno[j]);
					
					
				}
				
				System.out.println("\nO aluno " + nomeAluno + " acertou " + numAcertos + " questões e sua nota foi " + resultado);					
				
		}
		
		
		
	
	}
}

7 Respostas

Poneis123

Paulo,

O problema da sua comparação está no IF abaixo:

if(gabAluno[j] == gabOficial[i]) { numAcertos += 1; resultado += numAcertos; }

Vc está comparando várias notas digitadas (contador j) com 1 unica nota (contador i) pois como vc entrou em outro laço esse laço não incrementa o i ficando sempre um mesmo valor.

testa trocar o i por j também.

Outra coisa, vc não pode começar o seu contador do for com 1 pois quando vc utiliza gabOficial[i] ele pegará gabOficial[1] em diante, mas as listas começam em 0. Mude o contador para começar em 0 e onde vc precisar apresentar 1 some 1 (por exemplo, System.out.printf("Digite a %dª nota do aluno %s: ", j+1, nomeAluno):wink:

Att,

G

nesse for tu ta comparando cada nota do aluno com TODO o gabarito

F

Acho que vc se perdeu no for, e está comparando cada reposta com o gabarito inteiro… dai sempre vai dar diferente.

Poneis123

gpmdf2:
nesse for tu ta comparando cada nota do aluno com TODO o gabarito

Na verdade ele está comparando cada nota do aluno com uma unica nota do gabarito. Ele tem que comparar cada nota do aluno com cada nota do gabarito.

G

ah, tinha entendido errado…

vc tem 6 alunos
para cada aluno tem 5 notas do gabarito

vc compara todas as notas do gabarito do cara com uma nota so

if(gabAluno[j] == gabOficial[i])  
{  
    numAcertos += 1;  
    resultado += numAcertos;  
}

porque o “i” fica estacionado enquanto o “j” sai andando, pegando mais notas. Tu nao tinha que usar “j” no lugar do “i”, nao? tipo… se o gabarito[i] == respostaDoAluno[i]? que fica : se a quinta questao do gabarito for igual a quinta questao do aluno? Ne isso nao?

Outra coisa… por que p gabarito oficial tem 5 elementos e o gabarito do aluno tem 6? tipo… Se tu colocar int gabAluno[] = new int[5]; ainda assim ele vai ter 5 elementos, po (0, 1, 2, 3, 4, 5) = 5 elementos.

int gabOficial[] = {3, 1, 5, 2, 4};       
int gabAluno[] = new int[6];
Paulo_Mour

Eu tenho que comparar a posição 0 do aluno com a posição 0 do gabarito para ver se estão iguais e assim por diante. São 5 resultados do gabarito para 5 resultados do aluno.

G

sim, foi o que eu disse.

sobre o “i” e o “j”

e sobre vc criar um array com 6 posicoes ao inves de 5. Entendeu?

Criado 27 de abril de 2011
Ultima resposta 27 de abr. de 2011
Respostas 7
Participantes 4