AJUDEM vale a nota da primeira prova

12 respostas
B
Faça um programa para corrigir provas de múltipla escolha. Cada prova tem 10 questões e cada questão vale 1 ponto. O primeiro conjunto de dados a ser lido é o gabarito da prova. Os outros dados são os números dos alunos e as respostas que deram às questões, o programa para quando for digitado um valor negativo. Calcule e mostre: a) o número e a nota de cada aluno b) a percentagem de aprovação, sabendo-se que a nota mínima é 6 c) o nome e a nota do aluno que tirou a maior nota
import java.util.Scanner;

public class ex58 {

	public static void main(String[] args) {
		// contadores
		int x,y;
		// controle de equaçoes
		int qtd; //quantidade de alunos
		int resp; //resposta para comparar com o gabarito
		int acertos;//quantidade de acertos
		int maior=0;//maior nota
		String mnome=" ";//nome do aluno q tirou a maior nota
		int not=0;//nota do aluno
		int apr=0;// quantidade de aprovados
		int pApr;//porcentagem de aprovados

		int gabarito[] = new int[10];
		String nome[] = new String[10];
		int nota[]=new int [10];
		Scanner s = new Scanner(System.in);
		System.out.println(":::Gabarito:::".toUpperCase());
		for (x = 0; x < 10; x++) {
			System.out.print((x+1)+ "ª questao :" );
			gabarito[x] = s.nextInt();
		}
		System.out.println("Quantidade de alunos");
		qtd = s.nextInt();
		System.out.println(":::RESPOSTAS DAS PROVAS:::\n");
		//quantidade de alunos
		for(y=0;y<qtd;y++){
			System.out.print("Aluno: ");
			nome[x]=s.next();
			acertos=0;
			//quantidade de questoes
			for (x = 0; x < 10; x++) {
				System.out.print((x+1)+ "ª questao :" );
				resp=s.nextInt();
				if (resp==gabarito[x]){
					acertos+=1;
				}

				not=acertos;
			}
			if(not>=6){
				apr+=1;
			}
			if (not>maior){
				mnome=nome[x];
				maior=not;
			}
		}
		System.out.println(mnome+" tirou "+maior+" e teve a maior nota");
		pApr=apr*100/qtd;
		for (x = 0; x < 10; x++) {
			System.out.println(nome[x]+" nota: "+nota[x]);
		}
		System.out.println(pApr+"% foram aprovados ");
	}
}
Mas continua dando erro, se alguem puder me ajudar, preciso corrigir ate amanha para a professora avaliar.

12 Respostas

Rodrigo_Sasaki

Só pra te informar, o “AJUDEM” não vai te ajudar em nada, e falar que tá quase acabando o tempo também não.

A gente até te ajuda, mas não vamos fazer pra você, e não adianta cobrar e ficar com pressa, porque só vai fazer as pessoas ficarem com menos vontade de te ajudar.

Mas vamos lá, o que você quer dizer com “Mas continua dando erro” ?

Que erro ?

B

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 10
at ex58.main(ex58.java:33)

S

Na linha 33, troque

nome[x]=s.next();

por

nome[y]=s.next();
Rodrigo_Sasaki

Você está tentando acessar a posição 10 de um array com 10 posições, e isso não é válido.

As posições começam a contar do 0, portanto se você tem um array com 10 posições, só pode acessar as posições de 0 a 9, a posição 10 seria a 11ª, entendeu?

B

Aquilo corrigiu um erro e abriu outro :
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 10
at ex58.main(ex58.java:48)

S

Na linha 49 troque

mnome = nome[x];

por

mnome = nome[y];

Você está simplesmente usando a variavel errada para acessar o array.

B

Testei 3 alunos, um q acertou todas, um q acertou 6, e um q acertou 1. E a saida do programa foi:

teste10 tirou 10 e teve a maior nota
teste10 nota: 0
teste6 nota: 0
tste1 nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
66% foram aprovados

Quando teria que sair algo do tipo:
teste10 tirou 10 e teve a maior nota
teste10 nota: q0
teste6 nota: 6
tste1 nota: 1
66% foram aprovados

C

BuzzLaitir:
Testei 3 alunos, um q acertou todas, um q acertou 6, e um q acertou 1. E a saida do programa foi:

teste10 tirou 10 e teve a maior nota
teste10 nota: 0
teste6 nota: 0
tste1 nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
null nota: 0
66% foram aprovados

Quando teria que sair algo do tipo:
teste10 tirou 10 e teve a maior nota
teste10 nota: q0
teste6 nota: 6
tste1 nota: 1
66% foram aprovados

O que você faz neste for?

for (x = 0; x < 10; x++) {  
            System.out.println(nome[x]+" nota: "+nota[x]);  
        }
B

Mostra o nome e a nota do aluno

C

E para mostrar do jeito que você quer?

Desse jeito está imprimindo 10 resultados.
E onde você insere as notas neste array nota[]? Ele está vazio…

jeffev

Faça um teste antes de imprimir, imprima só se o valor não for null.

B

Obreigado pela ajuda!
desculpe ´pelas noobices no forum, :frowning:

Criado 1 de outubro de 2012
Ultima resposta 1 de out. de 2012
Respostas 12
Participantes 5