2017-11-11 147 views
-1

我知道我聽起來像一個糟糕的程序員現在 - 但我是新的,我不知道如何使用這個參考事物和傳遞參數,我的意思是我知道如何去做 - 但在同一時間 - 這是行不通的,我不知道爲什麼。C#簡單傳遞參數問題

static void Main(string[] args) { 
    DealCard(ref card); 
    Console.WriteLine(); 
    Console.ReadLine(); 
} 

private static void DealCard(string card) { 
    string finalNum = ""; 
    string finalSuite = ""; 
    bool diffCard = false; 
    do { 
    Random cardPicker = new Random(); 
    int cardSuite = cardPicker.Next(1, 5); 
    if (cardSuite == 1) { 
     finalSuite = "Hearts"; 
    } else if (cardSuite == 2) { 
     finalSuite = "Spades"; 
    } else if (cardSuite == 3) { 
     finalSuite = "Clubs"; 
    } else if (cardSuite == 4) { 
     finalSuite = "Diamonds"; 
    } 

    int cardNum = cardPicker.Next(1, 14); 

    if (cardNum == 1) { 
     finalNum = "Ace"; 
    } else if (cardNum == 2) { 
     finalNum = "Two"; 
    } else if (cardNum == 3) { 
     finalNum = "Thre"; 
    } else if (cardNum == 4) { 
     finalNum = "Four"; 
    } else if (cardNum == 5) { 
     finalNum = "Five"; 
    } else if (cardNum == 6) { 
     finalNum = "Six"; 
    } else if (cardNum == 7) { 
     finalNum = "Seven"; 
    } else if (cardNum == 8) { 
     finalNum = "Eight"; 
    } else if (cardNum == 9) { 
     finalNum = "Nine"; 
    } else if (cardNum == 10) { 
     finalNum = "Ten"; 
    } else if (cardNum == 11) { 
     finalNum = "Jack"; 
    } else if (cardNum == 12) { 
     finalNum = "Queen"; 
    } else if (cardNum == 13) { 
     finalNum = "King"; 
    } 

    string newCard = finalNum + " of " + finalSuite; 

    if (newCard != card) { 
     card = finalNum + " of " + finalSuite; 
     diffCard = true; 
    } else { 

    } 
    card = newCard; 

    } while (diffCard == false); 
} 

是的我知道大量'如果'是一個眼睛。 是的,我知道我可以在不到一半的條件下完成這項工作。 是的,我知道這是一個簡單的問題。 是的我知道我很糟糕,但我想虛心請求任何人幫助我停止失去頭髮。

+0

你不需要這樣的:'DealCard(REF卡) ;'因爲這會起作用:'DealCard(card);'但是,如果你有意使用'ref'並且你確切地知道爲什麼,那是不同的情況。 – CodingYoshi

+0

我知道你特別要求不要因爲大量的失敗而失去頭腦。但是,我只想爲您提供簡單的替代解決方案:使用字典。鍵將是數字,值字符串。然後,您可以用cardValuesDict [cardNumber] – netchkin

+3

替換整個卡片,然後在調用「DealCard」之前聲明'var card =「」;「。 – aaron

回答

0

您必須聲明你的方法是這樣的:

private static void DealCard(ref string card) 

基本方法必須接受ref參數。

這裏是文檔,以支持該回答:

Value Type Parameters

Reference Type Parameters

+0

我已經嘗試了在'字符卡'方法中使用'ref' - 並且我現在再次將其放入,仍然說'名字'卡'在當前上下文中不存在'我試圖在Main中調用它。 –

+0

你能發佈完整的代碼嗎?卡片在哪裏申報? – Darkonekt

+0

看起來像你的問題是不是與ref ....這是與卡變量的聲明和範圍 – Darkonekt

0

您的代碼可以是這樣的

public class Program 
{ 

    public static void Main(string[] args) { 
    string card = ""; 
    DealCard(ref card); 

} 

private static void DealCard(ref string card) 
{ 
    string finalNum = ""; 
    string finalSuite = ""; 
    bool diffCard = false; 
    do { 
     Random cardPicker = new Random(); 
     int cardSuite = cardPicker.Next(1, 5); 
     string[] suite = new String[]{"Hearts","Spades", "Clubs", "Diaminds"}; 


     int cardNum = cardPicker.Next(1, 3); 
     string[] numbers = new String[]{"one","two","three", "four"}; 



    string newCard = numbers[cardNum] + " of " + suite[cardSuite]; 

    if (newCard != card) { 
     card = finalNum + " of " + finalSuite; 
     diffCard = true; 
    } else { 

    } 
    card = newCard; 
     Console.WriteLine(newCard); 


    } while (diffCard == false); 
    } 
} 
+0

我已經嘗試過,我害怕 - 它仍然表示'卡'在上下文中不存在主要的。 –

+0

只是一個問題。你爲什麼要使用'ref'? – Saif

+0

這個答案是重複的答案。我回答了同樣的事情10分鐘前 – Darkonekt