1

次のように、入力されたサイズとユーザーが入力した要素を指定して、入力を配列に渡すために使用される単純なプログラムがあります: 完全なコード

このスニペットを除いて、すべてのコードは正常に機能します。

for(int i=0; i<size; i++) {
            flagger = false;
                while(flagger == false) {
                System.Console.WriteLine("Please enter number " + i + " : ");
                nextInput = System.Console.ReadLine();
                flagger = errorCheck(nextInput);
            }

            int varPass = System.Convert.ToInt32(nextInput);
            System.Console.WriteLine(flagger);
            arr[i] = varPass;
        }

入力したサイズに関係なく、ループが早期に終了し、いくつかの空の要素を含む配列をソートしますが、誰でも問題を見ることができますか?

4

2 に答える 2

4

errorCheck では、サイズの値を out パラメータに渡すときに設定しています。

そのため、次にユーザーが i より小さい数値を入力すると、ループは早期に終了します。ダミーの int を作成するか、エラー チェックを別の方法で処理します。例:

static bool errorCheck(string input) {  
    int temp=0;
    if (int.TryParse(input, out temp))  
        return true;
    return false;
}

この「バグ」は、サイズが静的であるために発生します。

TryParse の結果を返すだけで、コードをさらに簡素化できます。

static bool checkErr(string input) {
    int temp=0;
    return int.TryParse(input, out temp);
}
于 2013-06-28T08:34:43.653 に答える
1

私にとって重要と思われる errorCheck メソッドが含まれていません。errorCheck が true を返す場合、ループは途中で終了します。編集:おっと、完全なコードへのリンクが含まれていました。

先人が言っていたように、errorCheck(...) は「サイズ」を変更します。たぶんそれが、メンバー変数の前にアンダースコアを付けている理由です。見逃すのはとても簡単です。

于 2013-06-28T08:35:05.283 に答える