2014-09-20 3 views
1

Ребята я в полной растерянности, когда я делаю пример LinkedList о отображающих детали рождения,Смущает 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("---------------------------"); 
} 
} 

И у меня есть несколько вопросов необходимо уточнить, спасибо за вашу помощь заранее.

  1. Что можно использовать для объявления k? вопрос соответствует for(int k = 1; k < list.size(); k++)

  2. Я понятия не имею, почему мне нужно заявить об этом, я совершенно запутаться здесь:

    list.set(i, (Birth)list.get(i + 1)); 
    list.set(i + 1, birth); 
    
  3. я не получил никакого результата выполнения для «ввода Birthday, год, за исключением: Месяц : День: ". Это потому, что я не вводил никаких данных?

ответ

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; 
+0

Я заметил, если мы вводим скажем 'list.remove (list.size() - 1), я', это означает удалить последние 1 в массиве? –

+0

И действительно ли пузырь похож на вложенные петли? –

Смежные вопросы