Duvida sobre um exercicio de distruibuição de valores

Olá, sou um novato em java e estou com problemas nesta seguinte questão que o prof. do curso pediu para nós fazermos:

Enunciado:
As aulas de educação física, em muitas escolas, acontecem da seguinte maneira: O professor entrega uma bola
ao alunos (geralmente de futebol) e estes se dividem em times, onde jogam partidas alternadamente.
A maneira como os times são escolhidos também é semelhante em todas as escolas: decide-se quantos times
serão formados, e uma pessoa para montar cada um dos times. Cada pessoa vai escolher, alternadamente, um
dos alunos restantes para fazer parte de sua equipe. Como todos querem ter uma boa equipe, a pessoa que
vai escolher o próximo membro do time escolhe aquele, dentre os ainda disponíveis, que possui o melhor nível
de habilidade. Assim, os times acabam ficando relativamente equilibrados na soma do nível de habilidade dos
jogadores.

Tarefa
Dada uma lista de alunos que serão escolhidos e seus respectivos níveis de habilidade para os times e a quantidade
de times que serão formados, mostre como ficarão os times ao final do processo de montagem dos mesmos.

Entrada
A primeira linha da entrada contém dois inteiros N (2 · N · 10.000) e T (2 · T · 1000), representando
respectivamente a quantidade de alunos e o número de times a serem formados, sendo T · N. As N linhas
seguintes descrevem, cada uma, um aluno disponível para escolha de times. Cada uma dessas linhas possui o
nome do aluno (composto apenas por letras minúsculas) e um inteiro H (0 · H · 1.000.000) descrevendo seu
n´ıvel de habilidade).
Não existem dois alunos com o mesmo nível de habilidade, e todos eles possuem nomes diferentes. ´E poss´ıvel
que alguns times acabem ficando com menos jogadores do que os outros.

Saída
Seu programa deve imprimir a lista de times que ser´a formada ao final do processo de seleção. Para cada time,
você deverá mostrar o termo ?Time N?, onde N é o número do time (1 para o primero, 2 para o segundo, e
assim por diante) seguido de K linhas, onde K é a quantidade de jogadores do time, mostrando o nome de cada
um dos jogadores do time, em ordem alfabética. Imprima uma linha em branco após cada descrição de time
(inclusive do último).
Os times serão escolhidos pelo computador, então não é necessário considerar o aluno que irá fazer a escolha
dos times.

^ Pergunta 3 da OBI 2010

Estou precisando de ajuda na parte de organizar alfabeticamente e na parte de dividir os jogadores por times… qualquer ajuda é bem-vinda!

O que eu consegui fazer até agora:

import java.awt.*;
import javax.swing.*;
import java.util.Arrays;
public class times {
   public static void main(String[] args) {
	    int qntj = Integer.parseInt(JOptionPane.showInputDialog(null, "Quantos jogadores?", "Jogadores", JOptionPane.PLAIN_MESSAGE));
	   	// ^ pergunta a quantidade de jogadores
	   int qntt = Integer.parseInt(JOptionPane.showInputDialog(null, "Quantos times?", "times", JOptionPane.PLAIN_MESSAGE));
	   	// ^ pergunta a quantidade de times
	   
	   String[] nome= new String[qntj]; // nome dos jogadores
	   int[] lvl=new int[qntj]; //nível dos jogadores
	   
	   
	   for(int i = 0; i < qntj; i++){
	   nome[i] = JOptionPane.showInputDialog(null, "Digite o nome do Jogador", "times", JOptionPane.PLAIN_MESSAGE);
	   	// Define o nome do jogador
	   lvl[i] = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite a habilidade do Jogador", "times", JOptionPane.PLAIN_MESSAGE));
	   	// Define a habilidade do jogador
	   		}  // armazena nos vetores nome e nivel dos jogadores
	   
	   int n = qntj;
	    boolean doMore = true;
	    while (doMore) {
	        n--;
	        doMore = false;  
	        for (int i=0; i<n; i++) {
	            if (lvl[i] > lvl[i+1]) {
	                int temp = lvl[i];  lvl[i] = lvl[i+1];  lvl[i+1] = temp;
	                String temp2 = nome[i]; nome[i] = nome[i+1]; nome[i+1]=temp2;
	                doMore = true; 
	           	}
	        }
	    }
	    for(int i = 0; i<qntt; i++){
		   for(int j = 0; j < qntj; j++){
			    System.out.println("Time "+i+": "+nome[j]+" Time "+i+": "+nome[j+1]);
			    j=j+1; // minha tentativa falha de imprimir os jogadores nos times.
		   }
	   }
   }
}

Boa tarde, será que te ajuda?

Arrays.sort(nome_do_array); // ordenar array.

Sim, mas ainda preciso de a ajuda na hora de atribuir o jogador “x” a o time “x”… se p :wink: uder me ajudar nisso tbm te agradeco…

Em vez de criar um array para cada atributo do aluno (nome, habilidade etc.), crie uma classe Aluno, contendo esses atributos (nome, habilidade etc) e então crie um array de Aluno. A idéia é a seguinte: você tem de fazer coisas associadas (como nome e habilidade) “andarem junto” quando você vai fazer a ordenação.

Acredito que a idéia do programa é você não usar o Arrays.sort, e sim ordenar os Alunos na mão. Se for fazer isso, é relativamente fácil ordenar Alunos (pelo campo Nome ou habilidade, digamos) em vez de tentar controlar os índices respectivos.

[quote=entanglement]Em vez de criar um array para cada atributo do aluno (nome, habilidade etc.), crie uma classe Aluno, contendo esses atributos (nome, habilidade etc) e então crie um array de Aluno. A idéia é a seguinte: você tem de fazer coisas associadas (como nome e habilidade) “andarem junto” quando você vai fazer a ordenação.

Acredito que a idéia do programa é você não usar o Arrays.sort, e sim ordenar os Alunos na mão. Se for fazer isso, é relativamente fácil ordenar Alunos (pelo campo Nome ou habilidade, digamos) em vez de tentar controlar os índices respectivos. [/quote]

Entendi o que voce quis dizer, mas o objetivo do exercicio e de ordenar um numero “x” de alunos. em um numero “y” de times e e ai que esta o meu problema… Mesmo assim obrigado pela sua sugestao. ^^

Mas é isso mesmo que eu quis dizer. Você sabe que o nome do aluno “anda junto” com a habilidade.
Se você tem 2 arrays separados (ou mais), fica difícil você coordenar o nome com a habilidade - toda hora que você precisar trocar um nome ou habilidade de posição dentro do array, você tem de ficar sambando e dançando outros ritmos diferentes (talvez tecno-brega, como a nova novela da Globo).
Se você tem um array só, fica muito mais fácil. Eu duvido que seu professor não aceite uma solução que envolva criar uma classe bem simplesinha mesmo, que seja algo como

class Aluno {
    public String nome;
    public int habilidade;
}

E cada time é uma coleção de alunos, certo?

[quote=entanglement]Mas é isso mesmo que eu quis dizer. Você sabe que o nome do aluno “anda junto” com a habilidade.
Se você tem 2 arrays separados (ou mais), fica difícil você coordenar o nome com a habilidade - toda hora que você precisar trocar um nome ou habilidade de posição dentro do array, você tem de ficar sambando e dançando outros ritmos diferentes (talvez tecno-brega, como a nova novela da Globo).
Se você tem um array só, fica muito mais fácil. Eu duvido que seu professor não aceite uma solução que envolva criar uma classe bem simplesinha mesmo, que seja algo como

class Aluno {
    public String nome;
    public int habilidade;
}

[/quote]
Ah sim, desculpa e obrigado, e não, meu professor é bem flexivel com os códigos, quanto mas prático melhor!

Sim.