2013-12-03 4 views
1

Мне было поручено создать игру монополии с использованием связанного списка (я университетский студент) в качестве основы для доски, я внедрил Linked List, добавляющий узлы к доске, чтобы затем WriteLine в консоли окно. Кажется, что в коде нет видимых ошибок, но я, похоже, неправильно выполнил часть кода, поскольку только строка «Go» печатает в окне консоли? Любые советы будут высоко ценится.Реализация LinkedList

Вот код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace MonoPolyFin 
{ 
public class Square 
{ 
    public Square next; 
    public string p; 

    public Square(string p) 
    { 
     this.p = p; 
    } 

    public class Board{ 

     Square head; 
     Square current; 

     public void Add(Square s) 
     { 
      if (head == null) 
      { 
       head = s; 
       current = head; 
      } 
      else 
      { 
       current.next = s; 
       current = current.next; 
      } 
     } 

     public void Writrline() 
     { 
      while (head != null) 
      { 
       Console.WriteLine(head.p); 
       Console.ReadKey(); 
      } 
     } 

     static void Main(string[] args) 
     { 
      Board list = new Board(); 
      list.Add(new Square("Go")); 
      list.Add(new Square("Strand")); 
      list.Add(new Square("Trafalger Square")); 
      list.Add(new Square("Gas")); 
      list.Add(new Square("Leicester Square")); 
      list.Add(new Square("Piccadilly")); 
      list.Add(new Square("Card")); 
      list.Add(new Square("Regent Street")); 
      list.Add(new Square("Oxford")); 
      list.Add(new Square("Electric")); 
      list.Add(new Square("Mayfair")); 
      list.Add(new Square("Park Lane")); 
      list.Add(new Square("Jail")); 
      list.Add(new Square("Old Kent Road")); 
      list.Add(new Square("Whitechapel")); 
      list.Add(new Square("Water")); 
      list.Add(new Square("Islington")); 
      list.Add(new Square("Euston")); 
      list.Add(new Square("Card")); 
      list.Add(new Square("PallMall")); 
      list.Add(new Square("Whitehall")); 
      list.Add(new Square("Phone")); 
      list.Add(new Square("BowStreet")); 
      list.Add(new Square("VineStreet")); 
      list.Writrline(); 
     } 
    } 
} 
} 
+0

Вы никогда не двигаетесь в своем 'while'. 'head' не переназначается. –

+0

Это британское издание Монополии? : D –

+0

По правде говоря, я не уверен, что такое осуществление Монополии, так как нам дали задание нашим лектором, я посмотрел макет Британского совета и несколько других, и не могу найти этого! – itchebantye

ответ

2

Ваш метод записи не является правильным. Вы должны были бы перебирать пункты:

public void Writrline() 
    { 
     Square item = head; // Store the head - so you can modify it below 
     while (item != null) 
     { 
      Console.WriteLine(item.p); 
      item = item.next; // Move to next item in the list 
     } 
     Console.ReadKey(); // Read after the loop to pause (if you want to do this) 
    } 

Обратите внимание, что ваш старый метод будет фактически работать навсегда, если вы нажмете клавишу. Он должен печатать "Go" повторно каждый раз, когда вы нажимаете клавишу, так как она никогда не выполняет итерации по списку.

Для проекта «реального мира» я бы рекомендовал использовать LinkedList<T> вместо того, чтобы реализовать свой собственный связанный список.

+0

Благодарим за оказанную помощь, и я рассмотрю LinkedList как возможную альтернативу. – itchebantye

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