Pergunta

Bem-vindo. Eu tenho um método de classificação Radix que usa uma matriz para passar, mas precisa ter outra matriz (bin) que armazenará em uma fila vazia. Estou confuso sobre como faria uma fila para as caixas. Eu também tenho um método FindPlace que encontra o local de cada dígito quando chamado. Então, aqui está o que eu tenho. Alguém pode me ajudar a descobrir o que estou perdendo? Muito obrigado pelo seu tempo.

public static void radix(int [] list){
       int [] bin = new int[10]; 
      ArrayQueue<Integer> part = new ArrayQueue<Integer>(); // EDIT What would I do with this queue?? 
      int num = 0; 
         for(int i=0;i<list.length;i++)
         {
            bin[i] = 0;  
          }

            for(int pass=0;pass<list.length;pass++)
           {
                for(int num=0;num<list.length;num++)
               {
                       int digit=findPlace(bin[pass], num);
                 }

                  bin[digit].add(list[num]); // add to the bin
            }
              // Put back into list
               for(int h=0; h<10; h++)
               {
                    while(!bin[h].isEmpty())
                    {
                       list[num] = bin[queueNum].remove();
                     num++;
                    }
              }
        }


public static int getPlace (int x, int place)
    {return x/place % 10;}

Eu também fiz um método para encontrar o balde, então só preciso saber como o colocaria em uma matriz, eu faria isso? parte.add (getplace (x, lugar));?

Foi útil?

Solução

Sua matriz, bin não age como uma fila só porque você quer :) Matrizes não têm métodos como add() e remove(). Você tem duas opções sobre como consertar isso:

  • Programa no manuseio adequado para as filas: uma fila consiste em uma matriz e dois ponteiros nessa matriz, tradicionalmente chamados head e tail. Você teria que escrever seus próprios métodos para adicionar e remover, o que funcionaria com a matriz e os ponteiros e cuidaria de uma fila vazia ou transbordando.

  • Use a classe de fila embutida de Java. Está documentado nos javadocs da biblioteca. Não sei se sua tarefa pretende que você construa sua própria fila.

Atualizar com outro detalhe:

Você perguntou como extrair um único dígito de um número. É mais fácil trabalhar com os dígitos menos significativos (LSD), conforme sugerido no artigo da Wikipedia. Fazer isso:

  • Para extrair o último dígito, faça digit = number % 10 (Essa é a operação do módulo). Você receberá um número inteiro entre 0 e 9 inclusive.
  • Para tirar o último dígito, basta dividir por 10. Então você pode tirar outro dígito.
  • Como você precisará olhar para o último dígito de um número várias vezes, você faria bem em colocar essa funcionalidade em um método separado.

Você pode usar o seu 0 a 9 para selecionar a fila certa para colocar seu número.

Quando você termina a fila de todos os seus números nos 10 baldes, você precisa copiá -los de volta para uma única lista. Em seguida, repita enquanto ainda houver dígitos em qualquer número que você não tenha processado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top