compareTo erro

3 respostas
V

Alguem pode me ajudar, estou testando um algoritmo de ordenação usando quicksort, o programa cadastra titulos de livros e compara usando compareTo. O problema é que ele não ordena corretamente. O que devo fazer?

O codigo segue abaixo:

package quicksort;

import javax.swing.*;

public class QuickSort {

  public static void main(String[] args) {
    Livro biblioteca[] = new Livro[Integer.parseInt(JOptionPane.showInputDialog(
        "Informe o número de livros a serem\n cadastrados"))];

    biblioteca = preencheLivros(biblioteca);
    ordena(biblioteca);
    mostrar(biblioteca);

  } //main

  //mostra biblioteca
  static void mostrar(Livro biblioteca[]) {

    String mostrar = "";

    for (int i = 0; i < biblioteca.length; i++) {
      mostrar += biblioteca[i].titulo + "\n";
    }
    JOptionPane.showMessageDialog(null, "" + mostrar);

  }

  //preencher livros
  static Livro[] preencheLivros(Livro bib[]) {
    for (int i = 0; i < bib.length; i++) {
      bib[i] = new Livro();
      bib[i].titulo = JOptionPane.showInputDialog("Informe o nome do livro: " +
                                                  (i + 1));
    }
    return bib;

  }

  //ordenação
  static void ordena(Livro bib[]) {
    quickSort(bib, 0, bib.length-1);
  }

  //ordenação com quicksort
  static void quickSort(Livro bib[], int i, int j) {
    if (i < j) {
      String pivo = bib[ (i + j) / 2].titulo;
      int m = divide(bib, pivo, i, j);
      quickSort(bib, i, m - 1);
      quickSort(bib, m + 1, j);
    }
  }

  static int divide(Livro b[], String pivo, int i0, int j0) {

    int i = i0 - 1;
    int j = j0 + 1;

    do {

      do {
        i++;
        System.out.println(b[i].titulo.compareTo(pivo));
      }
      while (b[i].titulo.compareTo(pivo) > 0);

      do {
        j--;
        System.out.println(b[i].titulo.compareTo(pivo));
      }
      while (b[j].titulo.compareTo(pivo) < 0);

      if (i < j) {
        troca(b, i, j);
      }

    }
    while (i < j);

    return j;

  }

  static void troca(Livro b[], int i, int j) {
    Livro aux;
    aux=b[i];
    b[i]=b[j];
    b[j]=aux;
  }

}

class Livro {
  String titulo;
  String autor;
  String editora;
  int ano;
}

:?:
Obrigado

3 Respostas

E

ola,

ele nao esta ordenando direito, mas vc acha q 'por causa do compareTo?
vc sabe como funciona o compareTo? :?: :?:

V

Eu sei como funciona o compareTo sim, é que um amigo me falou que quando tentou fazer um programa usando compareTo, estava dando errado tb, então ele criou um método proprio que substituia o compareTo, dai sim funcionou, foi apenas suposição que o erro está ali, nada mais

:wink:

F

eu sempre usei o metodo compareTo e nunca tive problemas…

Criado 17 de junho de 2004
Ultima resposta 17 de jun. de 2004
Respostas 3
Participantes 3