2016-12-29 12 views
-3

この質問をどのように行うべきか私はよく分かりません。予測誤差のために計算を中止する

現在のところ、指定したパッケージの寸法をインチ単位で計算する独自のWindowsフォームアプリケーション(文字列形式でまとめて書かれています)を作成しており、寸法をセンチメートル、ミリメートルまたはメートルで計算しています。誰かが間違った次元を入力し、与えられた尺度が解析できない場合はどうだろうか。

Environment.Exit()のようなものですが、計算を停止してエラーが発生したというメッセージを書き込むだけでアプリケーションを終了することはありません。

このような質問がある場合は、見つからないためリンクしてください。

namespace PretvaranjeDimenzija 
{ 
public partial class Form1 : Form 
{ 
public Form1() 
{ 
    InitializeComponent(); 
} 
public double mjera = 1; 
public bool pogreska = false; 
public string mjeraKratica = " cm"; 
public string dimenzijeIspis = ""; 
private void buttonIzracunaj_Click(object sender, EventArgs e) 
{ 
    string dim = textBoxDimenzije.Text; 
    if (dim.Contains('.')) 
    { 
     dim = dim.Replace('.', ','); 
    } 
    if (dim.Length != 0) 
    { 
     if (dim.IndexOf('x') != -1) 
     { 
      string[] multiDim = dim.Split('x'); 
      double[] multiDimCentimetara = new double[multiDim.Length]; 
      bool[] uspjeh = new bool[multiDim.Length]; 
      for (int i = 0; i < multiDim.Length; i++) 
      { 
       uspjeh[i] = double.TryParse(multiDim[i], out multiDimCentimetara[i]); 
       if (uspjeh[i] == false) 
       { 
        pogreska = true; 
        goto kraj; 
       } 
      } 
      kraj: 
      if (pogreska == true) 
      { 
       MessageBox.Show("Doslo je do pogreske!"); 
       pogreska = false; 
      } 
      else 
      { 
       double[] dimenzije = new double[multiDim.Length]; 
       for (int i = 0; i < dimenzije.Length; i++) 
       { 
        dimenzije[i] = multiDimCentimetara[i] * 2.54 * mjera; 
        if (i == dimenzije.Length - 1) 
        { 
         dimenzijeIspis += dimenzije[i].ToString() + mjeraKratica; 
        } 
        else 
        { 
         dimenzijeIspis += dimenzije[i].ToString() + "x"; 
        } 
       } 
       textBoxIspisDimenzija.Text = dimenzijeIspis; 
       dimenzijeIspis = ""; 
      } 
     } 
     else 
     { 
      double dimCentimetara; 
      if(double.TryParse(dim, out dimCentimetara)) 
      { 
       double dimenzija = dimCentimetara * 2.54 * mjera; 
       dimenzijeIspis = dimenzija.ToString() + mjeraKratica; 
       textBoxIspisDimenzija.Text = dimenzijeIspis; 
       dimenzijeIspis = ""; 
      } 
      else 
      { 
       MessageBox.Show("Doslo je do pogreske!"); 
       return; 
      } 

     } 
    } 
} 

private void radioButton1_CheckedChanged(object sender, EventArgs e) 
{ 
    mjera = 0.01; 
    mjeraKratica = " m"; 
    if (radioButton2.Checked == true) 
    { 
     radioButton2.Checked = false; 
     radioButton1.Checked = true; 
    } 
    if (radioButton3.Checked == true) 
    { 
     radioButton3.Checked = false; 
     radioButton1.Checked = true; 
    } 
} 
private void radioButton2_CheckedChanged(object sender, EventArgs e) 
{ 
    mjera = 1; 
    mjeraKratica = " cm"; 
    if (radioButton1.Checked == true) 
    { 
     radioButton1.Checked = false; 
     radioButton2.Checked = true; 
    } 
    if (radioButton3.Checked == true) 
    { 
     radioButton3.Checked = false; 
     radioButton2.Checked = true; 
    } 
} 
private void radioButton3_CheckedChanged(object sender, EventArgs e) 
{ 
    mjera = 10; 
    mjeraKratica = " mm"; 
    if (radioButton2.Checked == true) 
    { 
     radioButton2.Checked = false; 
     radioButton3.Checked = true; 
    } 
    if (radioButton1.Checked == true) 
    { 
     radioButton1.Checked = false; 
     radioButton3.Checked = true; 
    } 
} 

}

+2

構文解析時にtry-catchを使用してください。 – Datsheep

+0

質問が不明です。入力された数値が間違っているとどのくらい正確に判断していますか? (ただし、解析中にエラーがスローされた場合は、@Datsheepが指摘したように 'try'' catch 'を使用することができます) – UnholySheep

+0

ユーザーがディメンションを入力し、ユーザーが実際にトリガする可能性があるボタンを押すと、入力値が正しいかどうかを検証し、それらを正しく解析すれば、いくつかの関数を通していくつかの検証ルールをverityに適用することができます。望ましくない値を使うと、いつでもtry-catchを使うことができます。 –

答えて

1

それはあなたの要件に応じて、非常にシンプルでなければなりません。たとえば、あなたのメソッドに基本的なブロックifを使用することができます。

void CalculateStuff() 
{ 
    // Get input. Do stuff. 

    if (IsInvalid) 
    { 
     MessageBox.Show("You did a bad thing."); 
     return; // exit the method. 
    } 

    // now that we know the input is good, do other stuff. 
} 

代替IsInvalidあなたが入力が有効でない場合にはtrueを返します好きなチェックの条件で。

+0

これは有効なコードですが、将来は計算を停止する必要がありますが、プログラムを終了させない場所があります。 –

+0

@HR_Luka - 正しい方法で使用するとプログラムを終了しません。あなたのアプリケーションに関する詳細を私たちに伝える必要があります。それはWinFormsですか?これはイベントハンドラから起こっていますか? –

+0

申し訳ありませんが、十分詳細に説明されていない場合。それはシンプルなWindowsフォームで、イベントハンドラがなく、発生するすべてがbool変数とtry-catchブロックで保護されたコードにあります。 –