关于数据排序的问题/
我写了一个冒泡法排序,我用COMPARETO来比较字符串的大小,但是发现一个问题,如果是数字形式的字符串和字符形式的('1',和a)放到一起有些时候就会出现排序混乱的情况.如果全是数字或者全是字符就没有这个问题,这个情况大家遇到过么?
这个是我的代码
private LinkedList orderByName (LinkedList newLinkedResult,String name,LinkedList tempLinkedResult)
{
Object key = null;
int k;
Object key1 = null;
Collator comp = Collator.getInstance();
comp.setDecomposition(Collator.TERTIARY);
for (int i = 0;i<newLinkedResult.size();i++)
{
k = i;
for (int j = i+1;j<newLinkedResult.size();j++)
{
System.out.println("k="+k);
System.out.println("j="+j);
System.out.println("!!!!! k ="+((Hashtable)tempLinkedResult.get(k)).get(name));
System.out.println("@@@@@ j ="+((Hashtable)tempLinkedResult.get(j)).get(name));
//if (((String)((Hashtable)tempLinkedResult.get(k)).get(name)).compareTo(((String)((Hashtable)tempLinkedResult.get(j)).get(name)))<0)
if (comp.compare((String)((Hashtable)tempLinkedResult.get(k)).get(name),(String)((Hashtable)tempLinkedResult.get(j)).get(name))<0)
{
k = j;
}
if ( i!=k )
{
key1 = tempLinkedResult.get(i);
System.out.println("^^^^^^^^^^^ key1 = "+key1);
tempLinkedResult.set(i,tempLinkedResult.get(k));
System.out.println("^^^^^^^^^^^ tempLinkedResult.get(k) = "+tempLinkedResult.get(k));
tempLinkedResult.set(k,key1);
key = newLinkedResult.get(i);
newLinkedResult.set(i,newLinkedResult.get(k));
newLinkedResult.set(k,key);
}
}
}
return newLinkedResult;
}
这个是我的数据,放到XML里的.
<?xml version = '1.0' encoding = 'GBK'?>
<ROWSET>
<ROW num="1">
<ID>1</ID>
<AG_AME>1</AG_AME>
<DESCRIBE>1111</DESCRIBE>
</ROW>
<ROW num="2">
<ID>2</ID>
<AG_AME>2</AG_AME>
<DESCRIBE>222</DESCRIBE>
</ROW>
<ROW num="3">
<ID>3</ID>
<AG_AME>3</AG_AME>
<DESCRIBE>3</DESCRIBE>
</ROW>
<ROW num="4">
<ID>9</ID>
<AG_AME>b</AG_AME>
<DESCRIBE>b</DESCRIBE>
</ROW>
<ROW num="5">
<ID>8</ID>
<AG_AME>a</AG_AME>
<DESCRIBE>a</DESCRIBE>
</ROW>
<ROW num="6">
<ID>6</ID>
<AG_AME>6</AG_AME>
<DESCRIBE>6</DESCRIBE>
</ROW>
<ROW num="7">
<ID>7</ID>
<AG_AME>7</AG_AME>
<DESCRIBE>7</DESCRIBE>
</ROW>
<ROW num="8">
<ID>10</ID>
<AG_AME>8</AG_AME>
<DESCRIBE>8</DESCRIBE>
</ROW>
<ROW></ROW></ROWSET>
结果是这个
!!@#b$$$$$b!!!!!!9
!!@#8$$$$$8!!!!!!10
!!@#a$$$$$a!!!!!!8
!!@#7$$$$$7!!!!!!7
!!@#6$$$$$6!!!!!!6
!!@#3$$$$$3!!!!!!3
!!@#2$$$$$222!!!!!!2
!!@#1$$$$$1111!!!!!!1
!!@#后边的是需要排序的列..
问题点数:50、回复次数:4Top
1 楼zfluo(云淡风清)回复于 2002-04-01 13:59:09 得分 50
if ( i!=k )
{
key1 = tempLinkedResult.get(i);
System.out.println("^^^^^^^^^^^ key1 = "+key1);
tempLinkedResult.set(i,tempLinkedResult.get(k));
System.out.println("^^^^^^^^^^^ tempLinkedResult.get(k) = "+tempLinkedResult.get(k));
tempLinkedResult.set(k,key1);
key = newLinkedResult.get(i);
newLinkedResult.set(i,newLinkedResult.get(k));
newLinkedResult.set(k,key);
这里是否需要加上一个k=i呢?
}
Top
2 楼whd11808(小玉米)回复于 2002-04-01 16:17:18 得分 0
呵呵,这位大侠,真厉害阿,呵呵,一下就看出来了,我忘了那个,呵呵,付帐Top
3 楼zfluo(云淡风清)回复于 2002-04-01 17:07:15 得分 0
1.我不是大侠
2.我不利害,我是一步一步的跟进去才查到的
3.编程的时候要小心,小地方是最容易出错,但是又最难查的
4.万一真的不小心搞错了,自己应该学会debug,不要什么都靠
别人帮你查,否则,自己是不会有进步的Top
4 楼whd11808(小玉米)回复于 2002-04-03 20:05:46 得分 0
呵呵,谢谢指点了/Top




