Ordenação de número

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 :smiley:

Use alguma IDE(Eclipse, Netbeans) para debugar a execução do programa. Com certeza vai te ajudar.

Olá, boa noite.

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.

[quote]Dica:

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

Exato.

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.

Veja um exemplo de Hello World usando o Debug do Eclipse:
http://www.developer.com/java/other/article.php/2221711/Debugging-a-Java-Program-with-Eclipse.htm

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 :wink:

[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

Hope that helps,
André AS.