0

私のサイコロ ローラー アプリには、7 つのテキスト ボックス (「サイコロの数」と「サイコロの種類」の 3 つのペアとボーナス 1 つ) とボタンが含まれています。私は、テキスト ボックスの各ペアが個別に読み取られることを意図しており、有効な数値が含まれていない場合 (「fate」と「%」はアプリの理由から数値として読み取られます)、それは無視されます。

問題は、「いいえ」のいずれかに有効な数字を入力しない場合です。of dice' テキスト ボックスを押すと、アプリは応答を停止し、最終的に読み込みページに戻ります。

すでに各方法を個別にテストしたことに注意してください。

コードは次のとおりです。

namespace DiceRoller
{
public sealed partial class MainPage : DiceRoller.Common.LayoutAwarePage
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    Random r = new Random();

    //regular, untouched basic page code here

    private void btnRoll1_Click(object sender, RoutedEventArgs e)
    {
        //the problem is with the number boxes.
        List<int>[] results = new List<int>[3];
        if (!(ReadInput(textBoxNumber1.Text) == 0 || ReadInput(textBoxType1.Text) == 0))
        {
            results[0] = Roll(ReadInput(textBoxType1.Text), ReadInput(textBoxNumber1.Text));
        }
        if (!(ReadInput(textBoxNumber2.Text) == 0 || ReadInput(textBoxType2.Text) == 0))
        {
            results[1] = Roll(ReadInput(textBoxType2.Text), ReadInput(textBoxNumber2.Text));
        }
        if (!(ReadInput(textBoxNumber3.Text) == 0 || ReadInput(textBoxType3.Text) == 0))
        {
            results[2] = Roll(ReadInput(textBoxType3.Text), ReadInput(textBoxNumber3.Text));
        }
        textBlockOutput1.Text = "Results:" + String.Join(", ",results[0]) + ", " + String.Join(", ", results[1]) + ", " + String.Join(", ", results[2]) + System.Environment.NewLine + "Total:" + ((results[0].Sum() + results[1].Sum() + results[2].Sum() + ReadInput(textBoxBonus.Text)).ToString());
    }

    //METHODS

    private int ReadInput(string input) //tested
    {
        int returnValue = 0;
        if (int.TryParse(input, out returnValue)) ; //the 'out' will make sure that the number has passed
        else if (input == "%") returnValue = 100;
        else if (input.ToLower() == "fate") returnValue = 6;
        else if (input == "") ;
        else textBlockOutput1.Text = "Error: All text boxes should contain a number,       the strings '%', 'Fate'(not case sensitive) or to be blank";
        return returnValue;
    }

    private int Roll(int diceType) //tested
    {
        return r.Next(diceType - 1) + 1;
    }

    private List<int> Roll(int diceType, int diceNumber)//tested
    {
        List<int> results = new List<int>();
        for (int i = 1; i <= diceNumber; i++) results.Add(Roll(diceType));//if one of the no. textboxes is read as '0', this couln't operate
        return results;
    }
}

}

-ヘルパーに事前に感謝します

編集:コメントでアドバイスされているように(ありがとう)デバッガーでそれを見て、エラーは「値をnullにすることはできません」です。しかし、どのような値ですか?何の手がかりにもなりません。再度、感謝します。

4

1 に答える 1

1

You've made an array of lists

List<int>[] results = new List<int>[3];

what you really wanted was List<int>() results = new List<int>();

then add values to this with results.Add(Roll());

You'll have more debugging to do to make sure there is 3 values for your final text set

Edit 2 This supports the theory

enter image description here

Edit..

Just realised you have 2 roll methods, You should initialize as sucn before setting them

for(int i = 0; i < 3; i++)
{
results[i] = new List<int>();
}
于 2013-05-02T18:12:33.617 に答える