Olá pessoal eu sou novo aqui no forúm e estou com uma dúvida de ordenação de número…
comecei a aprender java faze menos de 2 meses então eu nao sei praticamente nada…
então o programa que eu preciso fazer… é pegar uma turma de alunos e insirir o nome e a média dos alunos e depois disso o programa tem que imprimir os alunos que tiveram a maior e a menor média, sendo que 1 ou mais alunos podem ter tirado a nota máximo e/ou mínima…
eu consegui criar o programa e o código está aqui:
import java.util.Scanner;
public class Extra10_04 {
/**
*
*/
public static void main(String[] args) {
Scanner s = new Scanner (System.in);// Scanner para números
Scanner sNome = new Scanner (System.in);// Scanner para nomes
System.out.print ("Digite o número de alunos: ");
int n = s.nextInt();// número de alunos
String []vNomes = new String [n];
double []vMedias = new double [n];
double []vMaioresMedias = new double [n];
String []vNomesMaioresMedias = new String [n];
double [] vMenoresMedias = new double [n];
String []vNomesMenoresMedias = new String [n];
int contMaioresMedias = 0;// contador de quantos alunos tiveram as maior media
int contMenoresMedias = 0;//contador de quantos alunos tiveram a menor media
for(int i=0; i<n;i++){
System.out.print ("Digite o nome do aluno ["+(i+1)+"]: ");
vNomes[i] = sNome.nextLine();
System.out.print ("Digite a nota do aluno "+vNomes[i]+": ");
vMedias[i] = s.nextDouble();
}//for
//Ordenação
for(int i = 0;i<n-1;i++){
int min = i;
//calcular o mínimo
for(int j = i+1;j<n;j++){
if(vMedias[j]<=vMedias[i]){
min = j;
}
}
//trocar vMedias[min] com vMedias[i]
double aux = vMedias[min];
String auxNome = vNomes [min];
vMedias[min] = vMedias[i];
vNomes[min] = vNomes [i];
vMedias[i]= aux;
vNomes[i] = auxNome;
}
//organização dos vetores vMaioresMedias, vMenoresMedias, vNomesMaioresMedias e vNomesMenoresMedias.
for(int i=0;i<=n;i++){
vMenoresMedias[i] = vMedias[i];
vNomesMenoresMedias[i] = vNomes [i];
vMaioresMedias[i] = vMedias[n];
vNomesMaioresMedias[i] = vNomes[n];
if(vMedias[i+1]<= vMedias[i]){
vMenoresMedias[i+1] = vMedias[i+1];
vNomesMenoresMedias [i+1] = vNomes[i+1];
contMenoresMedias++;
}
if(vMedias[n-1]>= vMedias[n]){
vMaioresMedias[i+1] = vMedias[n-1];
vNomesMaioresMedias [i] = vNomes[n-1];
contMaioresMedias++;
}
}
for(int i = 0;i<=contMenoresMedias;i++){
System.out.println(vNomesMenoresMedias[i]+" obteve a menor média de: "+vMenoresMedias[i]);
}
for(int i = 0; i<=contMaioresMedias;i++){
System.out.println(vNomesMaioresMedias[i]+" obteve a maior média de: "+vMaioresMedias[i]);
}
}//main
}//class
só que na hora de rodar o programa o eclipse apresenta o seguinte erro Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at Extra10_04.main(Extra10_04.java:47)
alguém poderia me ajudar?
grato
Quanto ao erro ArrayIndexOutOfBoundsException se você olhar na documentação do Java SE verá que está tentando acessar por um índice errado, essa é a resposta do seu problema. Tente ir por partes, isolando os problemas…
[quote=NaCama]Olá pessoal eu sou novo aqui no forúm e estou com uma dúvida de ordenação de número…
comecei a aprender java faze menos de 2 meses então eu nao sei praticamente nada…
então o programa que eu preciso fazer… é pegar uma turma de alunos e insirir o nome e a média dos alunos e depois disso o programa tem que imprimir os alunos que tiveram a maior e a menor média, sendo que 1 ou mais alunos podem ter tirado a nota máximo e/ou mínima…
eu consegui criar o programa e o código está aqui:
import java.util.Scanner;
public class Extra10_04 {
/**
*
*/
public static void main(String[] args) {
Scanner s = new Scanner (System.in);// Scanner para números
Scanner sNome = new Scanner (System.in);// Scanner para nomes
System.out.print ("Digite o número de alunos: ");
int n = s.nextInt();// número de alunos
String []vNomes = new String [n];
double []vMedias = new double [n];
double []vMaioresMedias = new double [n];
String []vNomesMaioresMedias = new String [n];
double [] vMenoresMedias = new double [n];
String []vNomesMenoresMedias = new String [n];
int contMaioresMedias = 0;// contador de quantos alunos tiveram as maior media
int contMenoresMedias = 0;//contador de quantos alunos tiveram a menor media
for(int i=0; i<n;i++){
System.out.print ("Digite o nome do aluno ["+(i+1)+"]: ");
vNomes[i] = sNome.nextLine();
System.out.print ("Digite a nota do aluno "+vNomes[i]+": ");
vMedias[i] = s.nextDouble();
}//for
//Ordenação
for(int i = 0;i<n-1;i++){
int min = i;
//calcular o mínimo
for(int j = i+1;j<n;j++){
if(vMedias[j]<=vMedias[i]){
min = j;
}
}
//trocar vMedias[min] com vMedias[i]
double aux = vMedias[min];
String auxNome = vNomes [min];
vMedias[min] = vMedias[i];
vNomes[min] = vNomes [i];
vMedias[i]= aux;
vNomes[i] = auxNome;
}
//organização dos vetores vMaioresMedias, vMenoresMedias, vNomesMaioresMedias e vNomesMenoresMedias.
for(int i=0;i<=n;i++){
vMenoresMedias[i] = vMedias[i];
vNomesMenoresMedias[i] = vNomes [i];
vMaioresMedias[i] = vMedias[n];
vNomesMaioresMedias[i] = vNomes[n];
if(vMedias[i+1]<= vMedias[i]){
vMenoresMedias[i+1] = vMedias[i+1];
vNomesMenoresMedias [i+1] = vNomes[i+1];
contMenoresMedias++;
}
if(vMedias[n-1]>= vMedias[n]){
vMaioresMedias[i+1] = vMedias[n-1];
vNomesMaioresMedias [i] = vNomes[n-1];
contMaioresMedias++;
}
}
for(int i = 0;i<=contMenoresMedias;i++){
System.out.println(vNomesMenoresMedias[i]+" obteve a menor média de: "+vMenoresMedias[i]);
}
for(int i = 0; i<=contMaioresMedias;i++){
System.out.println(vNomesMaioresMedias[i]+" obteve a maior média de: "+vMaioresMedias[i]);
}
}//main
}//class
só que na hora de rodar o programa o eclipse apresenta o seguinte erro Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at Extra10_04.main(Extra10_04.java:47)
alguém poderia me ajudar?
grato :D[/quote]
Dica:
1 - Use nomes de variáveis sujestíveis, nunca “s” etc.
1 - Use nomes de variáveis sujestíveis, nunca “s” etc.
[/quote]
vc está falando da variável do Scanner?
eu coloco s pq é de Scanner…
então desculpa mas como funciona esse negocio do debug do eclipse… eu tentei fazer mais eu nao entendi nada :S
eu to a muito pouco tempo aprendendo java :S
E quanto ao debug ele serve para você ir acompanhando passo-a-passo da execução do seu programa, ele te mostra a pilha de execução do funcionamento do seu software daí você consegue ver mais facilmente onde está dando ou pode dar problemas.
[quote=NaCama]nossa eu acho que descobri…
eu esqueci que em vetores eles começam a armazenar as informações por 0…
então eu tenho que colocar n-1
Obrigado pela dica ;)[/quote]
Legal que entendeu… Fico contente…
Só não entendí o que você quis dizer por n-1. Anyway (d qlq. forma), veja:
Exemplo:
String nomesDeMulheresGostosasArray[] = new String[10]; // Gosto de terminar o nome com List para lista e Array para array
1 - Um array sempre começa do zero, logo:
vai do 0 ao 9 ele tem o tanto de posições passadas ao inicializá-lo, isto é, 10 posições
2 - Nunca é possível acessar a última posição, logo:
não é possível a acessar a posição de número 10