-2

コードをデバッグしましたが(以下)、問題はテキストボックスからテキストを変換するConvert()メソッドであることがわかりました。しかし、どうすればこの問題を解決できますか?

私はここに同様の問題の例があります。

コード:

//METHODS
    static string RollDice (int dice)
    {
        Random roll = new Random();
        int rollOutput = roll.Next(1, dice);
        //NOTE: VERY IMPORTANT! EVERY TIME THE INPUT GOES INTO THIS
        //METHOD REMEMBER TO INCREACE IT BY ONE!
        //AND NEVER LET THE USER TO ROLL TO DICE QUICKLY ONE AFTER ANOTHER!
        string rollResult = rollOutput.ToString();
        return rollResult;
    }

    static void TwiceD20(int bonus, bool advantage)
    {
        string firstRollString = RollDice(21) + bonus;
        string secondRollString = RollDice(21) + bonus;
        int firstRoll = Convert.ToInt32(firstRollString);
        int secondRoll = Convert.ToInt32(secondRollString);

        switch(advantage)
        {
            case true:
                if (firstRoll >= secondRoll)
                {
                    MessageBox.Show(firstRollString);
                }
            else
                {
                    MessageBox.Show(secondRollString);
                }
                break;
            case false:
                if (firstRoll <= secondRoll)
                {
                    MessageBox.Show(firstRollString);
                }
                else
                {
                    MessageBox.Show(secondRollString);
                }
                break;
        }
    }

    //BUTTONS

    private void btn1d20_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Roll Result: " + RollDice(21)); 
    }

    private void btnAdv_Click(object sender, EventArgs e)
    {

        TwiceD20(Convert.ToInt32(textBox1d20.Text), true);
    }

    private void btnDisAdv_Click(object sender, EventArgs e)
    {
        TwiceD20(Convert.ToInt32(textBox1d20.Text), false);
    }
4

1 に答える 1

1

非 int を文字列に追加しました。したがって、当然、文字列は単なる int ではないため、それを int に変換することはできません。

string firstRollString = RollDice(21) + bonus;    // This won't convert back to an int
string secondRollString = RollDice(21) + bonus;   // This won't convert back to an int
int firstRoll = Convert.ToInt32(firstRollString); 
int secondRoll = Convert.ToInt32(secondRollString); 

RollDice の文字列結果にボーナスを追加するには、文字列 "True" または "False" を RollDice の結果に追加するだけです。数値の 0 または 1 を追加していると思われます。

私はコメントが示唆するように行い、RollDice に数値を返させます。次に、それを文字列に変換し、後で必要に応じて操作できます。

または、何も返したくない場合は、操作の順序をすばやく変更してください。

int firstRoll = Convert.ToInt32(RollDice(21)); 
int secondRoll = Convert.ToInt32(RollDice(21)); 
string firstRollString = firstRoll + bonus;
string secondRollString = secondRoll + bonus;

しかし、自分のコードで何をしようとしているのかわからない場合でも、それがうまくいかない場合があります。

于 2012-09-13T20:05:33.007 に答える