当我为LinkedList做一个关于显示生日详情的例子时,我感到很困惑,
我的代码如下:
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args)
{
Birth[] birth = new Birth[10];
LinkedList list = new LinkedList();
for(int i = 0; i < 10; i++)
{
birth[i] = Birth.BirthEntry();
list.add(birth[i]);
}
Print(list);
list = LinkedSort(list);
Print(list);
}
public static LinkedList LinkedSort(LinkedList list)
{
for(int k = 1; k < list.size(); k++)
for(int i = 0; i < list.size() - k; i++)
{
if(((Birth)list.get(i)).compareTo(((Birth)list.get(i + 1)))>0);
{
Birth birth = (Birth)list.get(i);
list.set( i, (Birth)list.get( i + 1));
list.set(i + 1, birth);
}
}
return list;
}
public static void Print(LinkedList list)
{
Iterator it = list.iterator();
System.out.println("-----------------------");
while(it.hasNext())
{
System.out.println(it.next().toString());
}
System.out.println("---------------------------");
}
}
我有几个问题需要澄清,谢谢你的帮助。
这里有什么用来申报k?
该问题对应for(int k = 1; k < list.size(); k++)
我不知道为什么我要宣布这个,我在这里完全糊涂了:
list.set( i, (Birth)list.get( i + 1));
list.set(i + 1, birth);
除了&#34;输入生日,年份:月:日:&#34;我没有运行结果。是因为我没有输入任何数据吗?
答案 0 :(得分:1)
您的代码中存在相当大的错误,
if(((Birth)list.get(i)).compareTo(((Birth)list.get(i + 1)))>0);
{
Birth birth = (Birth)list.get(i);
list.set( i, (Birth)list.get( i + 1));
list.set(i + 1, birth);
}
不起作用,因为您的if
身体是单个分号。然后你有一个匿名块。将其更改为,
if(((Birth)list.get(i)).compareTo(((Birth)list.get(k)))>0) // <-- no semicolon
{
Birth birth = (Birth)list.get(i);
list.set( i, (Birth)list.get(k));
list.set(k, birth);
}
接下来,k
从1
开始,以便i
可以从0
开始(这是一个排序的嵌套循环)。接下来,List
的大小控制k
的范围。接下来,if
正文中的说明将交换i
处的元素和k
处的元素,如果 i
处的元素大于k
的元素。
最后,这个
for(int i = 0; i < list.size() - k; i++) {
应该是
for(int i = 0; i < list.size(); i++) {
if (i == k) continue;