0
    private void Calculate_Click(object sender, RoutedEventArgs e)
    {

        int x1 = int.Parse(textBox1.Text);
        int x2 = int.Parse(textBox2.Text);
        int x3 = int.Parse(textBox3.Text);
        int x4 = int.Parse(textBox4.Text);
        int x5 = int.Parse(textBox5.Text);
        int x6 = int.Parse(textBox6.Text);
        int x7 = int.Parse(textBox7.Text);
        int x8 = int.Parse(textBox8.Text);
        int x9 = int.Parse(textBox9.Text);



        int[] totalScore = new int[8];
        totalScore[0] = x1;
        totalScore[1] = x2;
        totalScore[2] = x3;
        totalScore[3] = x4;
        totalScore[4] = x5;
        totalScore[5] = x6;
        totalScore[6] = x7;
        totalScore[7] = x8;
        totalScore[8] = x9;
        int sum = 0;
        foreach(int i in totalScore)
        {
            sum += totalScore[i];
        }

    }

これは Windows 7.1 アプリ SDK に含まれています。私がやっていることは、ゴルフアプリを作成することです。その人が各ホールで得たスコアを取り込んで、それを配列に追加することになっています。次に、計算ボタンをクリックするとスコアが追加されますが、すべてのスポットが埋まらない場合でも機能するようにしたいと考えています。1 か所でも埋まらないとクラッシュし続けます。

4

5 に答える 5

0

int.Parse(...) メソッドの代わりに Int32.TryParse を使用してみてください。このように、テキストボックスが空の場合、文字列から Int への変換は例外を引き起こしません。

int x1;
Int32.TryParse(textBox1.Text,out x1);

int x2;
Int32.TryParse(textBox2.Text, out x2);
...
于 2013-04-28T16:59:52.973 に答える
0

を最初に配列に入れるTextBoxと、これははるかに簡単になります。

private TextBox[] numberTextBoxes;

// Call this method at some point while setting up your UI
private void Initialize()
{
    this.numberTextBoxes = new TextBox[] 
    {
         textBox1, textBox2, ...
    };
}

private void Calculate_Click(object sender, RoutedEventArgs e) 
{ 
    int sum = this.numberTextBoxes.Sum(t => this.GetIntValue(t.Text));
    ...
}

private int GetIntValue(string text)
{
    int value;
    int.TryParse(text, out value);
    return value; // 0 if text is not parseable
}

x1このように、 、x2x3、 ... またはtotalScore変数はまったく必要ありません。1 行で合計を計算できます。

于 2013-04-28T17:00:02.617 に答える
0

まあ、あなたは単に書くことができます

  int sum = totalScore.Sum();

ただし、「クラッシュ」の理由は、おそらくインデックス 8 の要素へのアクセスです。配列インデックスはゼロから配列の長さ - 1 になることに注意してください。したがって、9 つの入力ボックスがある場合、配列宣言は次のようになります。

int[] totalScore = new int[9];

totalScore[0] = x1;
totalScore[1] = x2;
totalScore[2] = x3;
totalScore[3] = x4;
totalScore[4] = x5;
totalScore[5] = x6;
totalScore[6] = x7;
totalScore[7] = x8;
totalScore[8] = x9;
int sum = totalScore.Sum();

もちろん、textbox.text に含まれる文字列から整数への変換は、無効な入力を避けるために検証する必要があります。最良のアプローチは、メソッド Int32.TryParse を使用することです

int tempValue;
if(Int32.TryParse(textBox1.Text,out tempValue)
    totalScore[0] = tempValue;

.. 他のテキストボックスについても同様です。

于 2013-04-28T17:00:31.223 に答える
0

0 は、数値に加算するための中立要素です。;)

if(button1 == empty)
  x1 = 0
else
  x1 = parse()

if(button2 == empty)
  x2 = 0
else
  x2 = parse()

...

于 2013-04-28T17:00:56.287 に答える
0

代わりに TryParse を使用してください。

   private void Calculate_Click(object sender, RoutedEventArgs e)
    {

        int x1 = 0;
        int.TryParse(textBox1.Text,out x1);
        int x2 = 0;
        int.TryParse(textBox2.Text, out x2);
        int x3 = 0;
        int.TryParse(textBox3.Text, out x3);
        int x4 = 0;
        int.TryParse(textBox4.Text, out x4);
        int x5 = 0;
        int.TryParse(textBox5.Text, out x5);
        int x6= 0;
        int.TryParse(textBox6.Text, out x6);
        int x7 = 0;
        int.TryParse(textBox7.Text, out x7);
        int x8 = 0;
        int.TryParse(textBox8.Text, out x8);
        int x9 = 0;
        int.TryParse(textBox9.Text, out x9);


        int[] totalScore = new int[8];
        totalScore[0] = x1;
        totalScore[1] = x2;
        totalScore[2] = x3;
        totalScore[3] = x4;
        totalScore[4] = x5;
        totalScore[5] = x6;
        totalScore[6] = x7;
        totalScore[7] = x8;
        totalScore[8] = x9;
        int sum = 0;
        foreach(int i in totalScore)
            {
            sum += totalScore[i];
            }

        }
    }
于 2013-04-28T17:04:42.513 に答える