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 ");
}
}
AJUDEM vale a nota da primeira prova
12 Respostas
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 ?
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 10
at ex58.main(ex58.java:33)
Na linha 33, troque
nome[x]=s.next();
por
nome[y]=s.next();
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?
Aquilo corrigiu um erro e abriu outro :
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 10
at ex58.main(ex58.java:48)
Na linha 49 troque
mnome = nome[x];
por
mnome = nome[y];
Você está simplesmente usando a variavel errada para acessar o array.
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
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 aprovadosQuando 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]);
}
Mostra o nome e a nota do aluno
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…
Faça um teste antes de imprimir, imprima só se o valor não for null.
Obreigado pela ajuda!
desculpe ´pelas noobices no forum, 