2016-01-14 1 views
0

Я написал простой простой код для обмена двух elemnts в списке, который выглядит следующим образом:Поменять местами два элемента

public void swap(Item a, Item aprev, Item b, Item bprev){ 
    aprev.next = b; 
    bprev.next = a; 
} 

Сейчас. Если я хочу поменять два элемента, ничего не изменится. Поэтому, если я это сделаю:

SelectionSortableList list = new SelectionSortableList(); 
    Item item = list.new Item("4"); 
    Item item1 = list.new Item("5"); 
    Item item2 = list.new Item("6"); 
    Item item3 = list.new Item("7"); 
    list.addFront(item.value); 
    list.addFront(item1.value); 
    list.addFront(item2.value); 
    list.addFront(item3.value); 

    System.out.println(list.toString()); 
    list.swap(item1, item, item3, item2); 
    System.out.println(list.toString()); 





/* */ public abstract class SinglyLinkedList 
/* */ { 
/* */ protected SinglyLinkedList.Item head; 
/* */ 
/* */ public void addFront(String s) { 
/* 6 */  if (head == null) { 
/* 7 */  head = new SinglyLinkedList.Item(s); 
/* */  } 
/* */  else { 
/* 10 */  SinglyLinkedList.Item insert = new SinglyLinkedList.Item(s); 
/* 11 */  next = head; 
/* 12 */  head = insert; 
/* */  } 
/* */ } 
/* */ 
/* */ public void add(String[] array) { String[] arrayOfString; 
/* 17 */  int j = (arrayOfString = array).length; 
      for (int i = 0; i < j; i++) { String s = arrayOfString[i]; 
/* 18 */  addFront(s); 
/* */  } 
/* */ } 
/* */ 
/* */ public String toString() 
/* */ { 
/* 24 */  if (head == null) { 
/* 25 */  return "empty list"; 
/* */  } 
/* 27 */  String s = ""; 
/* */  
/* 29 */  for (SinglyLinkedList.Item helper = head; next != null; 
helper = next) { 
/* 30 */  s = String.valueOf(s) + value + ", "; 
/* */  } 
/* 32 */  s = String.valueOf(s) + value; 
/* 33 */  return s; 
/* */ } 
/* */ 
/* */ public abstract void sort(); 
/* */ 
/* */ protected class Item 
/* */ { 
/* */  public Item next; 
/* */  public String value; 
/* */  
/* */  public Item(String value) { 
/* 44 */  this.value = value; 
/* */  } 
/* */ } 
/* */ } 

Извините за этот беспорядок, но это декомпилированная банка. И вот мой еще незавершенный класс:

public class SelectionSortableList extends SinglyLinkedList{ 

public Item head; 

public SelectionSortableList(){ 
    this.head = new Item(null); 
} 


public void swap(Item a, Item aprev, Item b, Item bprev){ 
    aprev.next = b; 
    bprev.next = a; 
} 

Ничего не меняется, и он печатает мне тот же список, что и раньше. Я действительно понятия не имею, почему это не работает. Было бы здорово, если кто-то может дать мне совет, или, может быть, если я напишу немного больше. Спасибо заранее!

+6

Мы действительно не можем помочь без реализации SelectionSortableList и Item – Idos

+1

Предлагаю вам выполнить свой код в своем отладчике, чтобы узнать, что он делает. –

+0

Ошибки в 'SinglyLinkedList', они не будут компилироваться (что' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', но что? –

ответ

0

Во-первых, было бы хорошо упомянуть, почему вы должны или хотите пойти этим путем, вместо того, чтобы использовать класс из Java Collections Framework.

Но даже если вы делаете это в образовательных целях, например. узнайте о структурах списков данных и алгоритмах, работающих в списке, я бы рекомендовал сначала запрограммировать его со стандартным Java API, например, в this example.

Затем, чтобы понять, что происходит внутри, следуйте за источником используемых классов. Вы найдете его у OpenJDK project или, например, nicely browsable here.

Когда вы это поняли, вы можете вернуться и реализовать свою собственную версию и (если вы, например, должны) использовать данную структуру данных.


Что касается вашей конкретной проблемы - я не пробовал его (вы должны сделать это отладки как это было предложено ранее), но я полагаю, что при расширении класса и используя тот же член имя переменной, то в тень базовый класс один и, следовательно, не работает на нем. Поэтому вы должны расширить функциональность, но работать с одной и той же структурой данных.

+0

Это просто домашнее задание для университета. Я просто произвел впечатление, почему полный простой код не хочет работать и отправил его здесь, потому что четыре глаза лучше, чем два – Maxim

+0

@Maxim См. мой обновленный ответ –

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

  • Нет связанных вопросов^_^