2014-02-16 4 views
1

Я собираю C# и как упражнение для новичков, я попытался закодировать простой список турниров Tekken. Проблема в том, что я не могу найти способ применения метода класса Fighter ко всему списку бойцов, так как нет имен переменной или, по крайней мере, я думаю, что это проблема.Применение метода ко всем экземплярам класса внутри списка

using System; 
using System.Collections.Generic; 

namespace TekkenConsoleTournament 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Console.WriteLine ("Enter nicknames of players, finished by 0: \n"); 
      int numFighter=0; 
      String nickname; 
      List <Fighter> allFighters = new List<Fighter>(); 
      while ((nickname = Console.ReadLine()) != "") { 
       allFighters.Add(new Fighter(nickname)); 
       numFighter ++; 

      } 
      Console.WriteLine(allFighters.ForEach(Fighter.getName())); 

      Console.WriteLine(foreach(Fighter in allFighters) {getName();}); 

      //for (int counter = 0; counter <= fighter; counter++) { 
      // Fighter[counter.getName(); 
      //} 
     } 
    } 
} 

И Fighter.cs

using System; 

namespace TekkenConsoleTournament 
{ 
    public class Fighter 
    { 
     private int matches, won, lost, draw; 
     String name; 
     public Fighter (String name) 
     { 
      this.matches = this.won = this.lost = 0; 
      this.name = name; 
     } 

     public void wonMatch() 
     { 
      matches++;won++; 

     } 
     public void lostMatch() 
     { 
      matches++;lost++; 

     } 

     public void drawMatch() 
     { 
      matches++;draw++; 

     } 

     public int[] getStats() 
     { 
      int[] stats = {this.matches,this.won,this.lost,this.draw}; 
      return stats; 
     } 

     public String getName() 
     { 
      return this.name; 
     } 
    } 
} 

Сначала я хотел бы напечатать имена всех бойцов, то, возможно, статистика, а затем в качестве упражнения попробуйте сделать код помните, кто воевал, кто и поместить их в двумерную матрицу, основанную на результате боя.

+0

Можете ли вы предоставить свой класс Fighter? И что именно вы хотите, показать имена всех бойцов? –

+1

Вы хотите поместить код Console.WriteLine внутри цикла foreach. –

+0

Несколько указателей (условные обозначения): классы, имена методов и имена свойств должны быть PascalCased (т. Е. Public void DrawMatch()). Методы, которые только получают/устанавливают значение, обычно должны быть свойствами (т.е. public String getName() должно быть общедоступным. String Name {get {return this.name;}}. Вы можете (и * I * сказать * should *) использовать ' string' вместо 'String' (так же, как вы используете' int', а не 'Int32' – flipchart

ответ

1

Использовать петлю foreach?

foreach(var fighter in allFighters) 
{ 
    // do something with fighter 
    var name = fighter.getName(); 
    Console.WriteLine(name); 
} 

Я предполагаю, что есть метод getName, если не использовать field или property имя, чтобы получить имя текущего бойца.

Ваша ошибка в том, вы ставите ForEach петли внутри Console.WriteLine method.You должен сделать opposite.And этот синтаксис является неправильным:

foreach(Fighter in allFighters) 

Это должно быть так:

foreach(Fighter fighter in allFighters) 

Or вы можете использовать var, как показано в приведенном выше коде.

+0

Спасибо для вашей помощи. Я подумал, что, если я заранее не задал имя переменной, я не смог бы работать с ней таким образом. С вашим дополнением все это работает. После того, как я закончу, я отправлю заполненный код здесь. – Tylnesh

1

Вы близки, но не совсем. Попробуйте следующие варианты:

Console.WriteLine(string.Join(", ", allFighters.Select(f => f.getName()))); 

allFighters.ForEach(fighter => Console.Writeline(fighter.getName())); 


foreach (Fighter f in allFighters) 
{ 
    Console.WriteLine(f.getName()); 
} 
Смежные вопросы