2013-03-18 30 views
-2

我在調用main函數時遇到了麻煩,因爲它需要同時返回2個列表。該功能將卡從一個列表添加到另一個列表,然後將其從原始列表中刪除。但是,當我嘗試並調用我得到這個錯誤的函數...沒有重載方法「命中」需要1個參數無過載方法「命中」需要1個參數。需要返回兩個列表

using System; 
    using System.Collections.Generic; 
    using System.Text; 

    namespace BlackJackGameX 
    { 
     public class MainClass 
     { 
      public static void Main (string[] args) 
      { 

       Deck Cards = new Deck(); 

       Hand PlayerHand = new Hand(); 

       Console.WriteLine("Welcome to Black Jack\n\nPress Enter To Start"); 
       Console.ReadLine(); 

       PlayerHand.Hit(PlayerHand); 
       PlayerHand.Hit(PlayerHand); 
       PlayerHand.HandPrint(); 


      } 
     } 
    } 

的問題是在這手牌類的命中功能底部

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace BlackJackGameX 
{ 
    public class Hand 
    { 

     Deck CardDeck = new Deck(); 

     public List<Card> PlayerHand; 

     public Hand() 
     { 

     } 

     public void HandPrint() 
     { 
      for (int i = 0; i < PlayerHand.Count; ++i) 
      { 
       Console.WriteLine("You have a " + PlayerHand[i].CardValue + " of " + PlayerHand[i].CardSuit); 

       if (i < PlayerHand.Count) 
       { 
        Console.WriteLine ("&"); 
       } 
      } 

      Console.ReadLine(); 

     } 

     public List<Card> Hit(List<Card> CardDeck, List<Card> PlayerHand) 
     { 
      PlayerHand.Add(CardDeck[1]); 
      CardDeck.Remove(CardDeck[1]); 

      return PlayerHand; 
     } 

    } 
} 
+0

爲什麼你需要退貨?它們是引用(比如指針),所以你不需要返回它們,它們已經被修改了。 – tjameson 2013-03-18 01:57:09

+0

要返回2個項目,通常會使用'Tuple',但是您的問題很難確定。 – 2013-03-18 02:08:22

+0

正如你所看到的,我走出了自己的深度,我很抱歉發佈這個,我會看看我能不能找出我出錯的地方。 – 2013-03-18 02:18:39

回答

1

您遇到的錯誤是因爲Hand類中的Hit()方法接受2個參數,而不是1.它期望兩個參數List<Card>()

您的代碼傳遞的是Hand對象,根本無法工作,無論參數的數量如何。

+0

那麼如何在主函數中使用我的其他類的列表? – 2013-03-18 01:59:06

+0

@JonDunn我在主函數中看不到任何列表,只有Hand和Deck對象。 – tjameson 2013-03-18 02:01:46

+0

Deck類是混洗牌的列表,Hand類包含玩家牌的列表 – 2013-03-18 02:07:22

2

您的Hit方法預計有兩個List<Card>參數,但只傳遞一個Hand對象。

public List<Card> Hit(List<Card> CardDeck, List<Card> PlayerHand) 
{ 
    ... 
} 

你需要做的是通過Cards對象主要爲Hand構造使手可以使用它什麼:

public class Hand 
{ 
    // You should make this private with a public property to guard it 
    public List<Card> PlayerHand; 

    // No reason to expose this to the outside 
    private Deck cardDeck = new Deck(); 

    public Hand (Deck cards) 
    { 
     cardDeck = cards; 
    } 

    // There's nothing worth returning here, so make it void 
    public void Hit() 
    { 
     // I would probably implement a method in the Deck class 
     // so you could do something like (where RemoveNext returns the card removed): 
     // playerHand.Add(cards.RemoveNext()); 
     playerHand.Add(CardDeck[1]); 
     CardDeck.Remove(CardDeck[1]); 
    } 

而且你Main看起來是這樣的:

public static void Main (string[] args) 
{ 
    Deck cards = new Deck(); 
    Hand playerHand = new Hand(cards); 

    Console.WriteLine("Welcome to Black Jack\n\nPress Enter To Start"); 
    Console.ReadLine(); 

    playerHand.Hit(); 
    playerHand.Hit(); 
    // I would rename this to PrintHand(). HandPrint is a noun. 
    playerHand.HandPrint(); 
} 
+0

感謝您的幫助,但我的代碼仍然有效,如何建議在套牌中實現RemoveNext功能? – 2013-03-19 10:06:35

+0

如果你的'Deck'類包含一個'List',其中包含你用來表示牌的任何東西,並且甲板被洗牌(隨機),你可以從甲板的頂部拉。 'var tmp = PlayerHand [0]; PlayerHand.Remove(TMP);你可以使用'RemoveAt(0);'。 – 2013-03-19 12:34:34

+0

嗨,再次,我很抱歉,但即時通訊仍然努力實現Hit功能,我嘗試了我所知道的任何東西,但它似乎沒有工作,我應該在哪裏放置RemoveAt(0)函數?在Hand類中還是在Deck類中? – 2013-03-20 19:20:56

相關問題