-2

同時に2つのリストを返す必要があるため、メインでクラス関数を呼び出すのに問題があります。この関数は、あるリストから別のリストにカードを追加してから、元のリストからカードを削除します。しかし、関数を呼び出そうとすると、このエラーが発生します...オーバーロードメソッド「ヒット」は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;
        }

    }
}
4

2 に答える 2

2

Hitメソッドは 2 つのパラメーターを想定していますが、1 つのオブジェクト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();
}
于 2013-03-18T02:53:21.487 に答える
1

あなたが持っているエラーはHit()、あなたのクラスのメソッドがHand1つではなく2つのパラメータを受け入れるためです。それは2つのList<Card>()パラメータを期待しています。

あなたのコードはHand、パラメータの数に関係なく、まったく機能しないオブジェクトを渡しています。

于 2013-03-18T01:56:01.657 に答える