Eu me recuso! :(

6 respostas
S

Pessoal, vale uma ajuda aqui por favor!

Como alguns sabem ja programo ha alguns anos em fox. pra mim e um palavrão o fato de ter que ficar pulando de posição em posição pra ordenar um vetor (nao que eu nao consiga fazer isso, mas e muito lusitano!).

A pergunta é: Tem algum comando pra eu ordenar um vetor multidimensional atraves de uma das suas colunas?

Por exemplo: Aluno, media.

Ordenar a coluna media com seus nomes co-relacionados. (tipo: ana = 7, sunda = 10

Ficaria:

Sunda = 10
Ana = 7)

Brigadão por qq ajuda!

6 Respostas

M

bom Vetores primitivos não, mas Coleções, lista, mapas tem.

:okok:

S

Por que precisa ser multidimensional? Você pode usar Comparable ou Comparator (busca no fórum que já responderam isso).

Nota: Procure colocar um título mais explicativo.

L

Pow, realmente tem que concordar que moh vacilo colocar titulos assim…

E sim, da para vc fazer isso com java, já que um array eh um objeto:

int[][] i = { { 1, 5, 3 }, { 4, 1, 6 }, { 4, 6, 2 }, { 3, 3, 1 } };
      Arrays.sort(i, new Comparator<int[]>()
      {

         public int compare(int[] o1, int[] o2)
         {
            return o1[1] - o2[1];  //posição que vc quer comparar
         }
      });

      for (int[] n : i)
      {
         System.out.println(n[0] + " - " + n[1] + " - " + n[2]);
      }

para o exemplo que vc deu:

Object[][] i = { { "joana", 1 }, { "joao", 4 }, { "pedro", 2 }, { "Maria", 3 } };
      Arrays.sort(i, new Comparator<Object[]>()
      {

         public int compare(Object[] o1, Object[] o2)
         {
            return Integer.valueOf(o1[1].toString()).compareTo(Integer.valueOf(o2[1].toString()));
         }
      });

      for (Object[] n : i)
      {
         System.out.println(n[0] + " - " + n[1]);
      }

flw

S

Vlw mesmo galera!

Aqui eu tô em casa. foi mal pelo titulo, mas essa foi demais!

Aff…

S

Pessoal,

Sem abusar muito da boa vontade de voces, eu to com uma ultima duvida em relação a isso que eu procurei em livros, na internet, quebrei a kbça pra fazer e não consegui.

Observem:

Object[][] i = { { "joana", 1 }, { "joao", 4 }, { "pedro", 2 }, { "Maria", 3 } };

Blz, nesse caso o objeto ja esta sendo inicializado com os valores.
Mas esses são variaveis, entao criei um metodo conforme abaixo:

public void alimentaVetor (String nome, double media){
        teste[][] = { { "joana", 1 }};
        //System.out.print(teste.length);
        System.out.printf(String.valueOf(teste[0][0] + "\n"));
    }

Nâo funciona!

Na verdade, gostaria de saber como eu posso incrementar um vetor deste tipo, ou seja, toda vez que ele entrar nesse metodo, colocar ele = ele + 1 (so a linha pq a coluna e sempre =2) e como passar os valores dos parametros para este vetor obj!

Dai o resultado final do vetor vai ser o mesmo:

Posicao 0 = { joana, 1 }

Posicao 1 = { joao, 4 }

Posicao 2 = { pedro, 2 }

Posicao 3 = { Maria, 3 }

Não vão se arrepender por me ajudar! Daqui a pouco vou estar na pista ae tb pra ajudar os outros aqui no forum!

L

se vc quer fazer ele igual a ele mais um, então vc naum quer uma matriz, pois elas são estaticas, com tamanho fixo. Você quer uma List

public class Teste
{
   List<Object[]> list = new ArrayList<Object[]>();

   void add(String nome, int media)
   {
      Object[] array = { nome, media };
      list.add(array);
   }
}

para ordenar:

Collections.sort(list, new Comparator<Object[]>()
      {

         public int compare(Object[] o1, Object[] o2)
         {
            return Integer.valueOf(o1[1].toString()).compareTo(Integer.valueOf(o2[1].toString()));
         }
      });

Mas eu faria assim:

public class Teste
{
   List<Aluno> list = new ArrayList<Aluno>();

   void add(String nome, int media)
   {
      list.add(new Aluno(nome, media));
   }
}

class Aluno
{
   private int media;
   private String nome;

   public Aluno (String nome, int media)
   {
      this.media = media;
      this.nome = nome;
   }

   public int getMedia()
   {
      return media;
   }

   public String getNome()
   {
      return nome;
   }
}

comparando assim:

Collections.sort(list, new Comparator<Aluno>()
      {

         public int compare(Aluno o1, Aluno o2)
         {
            return o1.getMedia() - o2.getMedia();
         }
      });
Criado 15 de abril de 2007
Ultima resposta 18 de abr. de 2007
Respostas 6
Participantes 4