Официальный сайт студ.городка НГТУ
Программирование и БД » [Java] проблема с сортировкой 

#1  31.05.07 00:52

[Java] проблема с сортировкой

есть класс list.то есть односвязынй список.
есть класс elem в классе list.то есть элемент списка.

Код: Java:

class elem
{
  Comparable val;
  elem next;
}

а есть сортировка:

Код: Java:

void sort()                                           
  {
    elem q, out, p , pr;
    out = null;
    while (hd !=null)                  //hd - заголовок списка
    {
	q = hd; hd = hd.next;
	for( p=out,pr=null; p!=null && q.val.compareTo(p.val)>0;pr=p,p=p.next);
	if (pr==null)
	  { q.next=out; out=q; }
	else
	  { q.next=p; pr.next=q; }
    }
 hd=out;
}

метод compareTo переопределён след. образом в классе nexx:

Код: Java:

public class nexx implements Comparable{
    String num, data;
	nexx(String n0, String d0) { num = n0; data = d0; }
    public String toString() {return num + ":" + data + "\n";}
    public int compareTo(Object o)
    {
        if(o instanceof nexx) return data.compareTo(((nexx)o).data);
        return 0;
    }
}

а теперь,уважаемые знатоки,вопрос:
почему сортировка работает нормально только с цифрами (0-9) или же только с дву(трёх,четырёх...n)значными числами.если же попробовать отсортировать 3,4 и 30,то получается фигня какая-то.
на Си сортировка работает без проблем.

Исправлено chezzz (31.05.07 00:56)

Offline

#2  31.05.07 01:26

Re: [Java] проблема с сортировкой

наверное, потому что data это String.
а стринги "3" < "30" < "4" по умолчанию

Offline

#3  31.05.07 01:28

Re: [Java] проблема с сортировкой

Код: java:

List<String> list = new ArrayList<String>();
		list.add("30");
		list.add("4");
		list.add("3");
		Iterator<String> it = list.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		java.util.Collections.sort(list);
		it = list.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}

Offline

#4  31.05.07 18:24

Re: [Java] проблема с сортировкой

спасибо,понял
только вот не особо разобрался в последнем коде

Offline

#5  31.05.07 20:48

Re: [Java] проблема с сортировкой

это пример сортировки строк 30, 4 и 3
что непонятного?

Offline

#6  31.05.07 21:35

Re: [Java] проблема с сортировкой

chezzz, класс nexx - класс целых чисел во внешней форме представления?

Исправлено kvazimodo (31.05.07 21:46)

Offline

#7  31.05.07 22:07

Re: [Java] проблема с сортировкой

kvazimodo, Я хз,Романов сказал делать так =)
по идее, это интерфейсный класс или что-то вроде,чтобы методы вызывались не из родных классов,а из этого.

Исправлено chezzz (31.05.07 22:07)

Offline

#8  01.06.07 20:11

Re: [Java] проблема с сортировкой

просто задание знакомо ;)
я делал так:

Код: Java:

public class integer implements Comparable{
    char[] c;
    short sign;
    int sz;
. . .
public int compareTo(Object s) // сравнение объектов
    {
       if(!(s instanceof integer)) return 0;
       integer snd=(integer) s;
        if(sign==snd.sign)// сначала знаки
           {
            if(sz<snd.sz) return sign==1 ? -1 : 1; // потом размерности
            else if(sz>snd.sz) return sign==1 ? 1 : -1;
               else
                   {
                   for(int i=0; i<sz;i++)//затем по старшей цифре
                       {
                        if(c[i]>snd.c[i]) return sign==1 ? 1 : -1;
                        else if(c[i]<snd.c[i]) return sign==1 ? -1 : 1;
                       }
                    return 0;
                   }
           }//0-равны, 1-первый больше, -1-первый меньше
        else return sign>snd.sign ? 1 : -1;
    }
}

Offline

Программирование и БД » [Java] проблема с сортировкой 

ФутЕр:)

© Hostel Web Group, 2002-2026.   Сообщить об ошибке

Сгенерировано за 0.155 сек.
Выполнено 14 запросов.