3

私のコードには何か問題があります。私は独学で c# を学んでいますが、この章の課題の 1 つは、ユーザーに 10 個の数字を要求し、それらを配列に格納することでした。追加の数字を 1 つ要求するのではありません。次に、プログラムは、追加の数値が配列内の数値の 1 つと一致するかどうかを判断します。今、私が以下に持っているものは機能しますが、配列のサイズである 10 未満の比較数を入力した場合のみです。

修正方法がわかりません。比較の仕方がわかりません。最初に FOR ループを試してみましたが、これは機能しましたが、ループを実行して 10 個すべての数値との比較を表示したため、No! の 9 行が表示されます。そしてYes!の1行。私は休憩を入れました。これで 10 個すべてのカウントが停止しましたが、比較のために 5 を入力すると、No! の 4 行が表示されます。そしてYes!の1つ。以下は、確実に機能させることができる唯一の方法ですが、数値が配列の範囲外にない限りのみです。

数値が 10 を超えるとエラーが発生する理由がわかります。それを比較するために何を使用すればよいかわかりませんが、ユーザーが有効な整数を入力できるようにします。どんな援助も素晴らしいでしょう!

        int[] myNum = new int[10];
        Console.WriteLine("Starting program ...");
        Console.WriteLine("Please enter 10 numbers.");

        for (int i = 0; i <= 9; ++i)
        {
            Console.Write("Number {0}: ", i + 1);
            myNum[i] = Int32.Parse(Console.ReadLine());
        }

        Console.WriteLine("Thank you.  You entered the numbers ");
        foreach (int i in myNum)
        {
            Console.Write("{0} ", i);
        }

        Console.WriteLine("");
        Console.Write("Please enter 1 additional number: ");
        int myChoice = Int32.Parse(Console.ReadLine());
        Console.WriteLine("Thank you.  You entered the number {0}.", myChoice);

        int compareArray = myNum[myChoice - 1];

        if (compareArray == myChoice)
        {
            Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
        }
        else
        {
            Console.WriteLine("No!  The number {0} is not equal to any of the entered numbers.", myChoice);
        }

        Console.WriteLine("End program ...");

        Console.ReadLine();
4

4 に答える 4

4

あなたは正しい軌道に乗っていました.myNum の配列をループして、各要素を変数 myChoice と比較したいと考えています。配列の各要素が一致するかどうかを出力したくない場合は、新しい変数を作成し、それを使用して一致が見つかったかどうかを追跡します。次に、ループの後、その変数をチェックして、結果を出力できます。通常は bool 変数を使用します。最初は false に設定し、一致が見つかったら true に設定します。

bool foundMatch = false;
for (int i = 0; i < 10; i++) {
    if (myNum[i] == myChoice) {
        foundMatch = true;
    }
}
if (foundMatch) {
    Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
}
于 2012-06-14T02:39:30.777 に答える
3

System.Linq 名前空間を含める場合 (または myNum の型を のようにICollection <T>List<T>を実装するものに変更する場合)、 を使用して、値が の値のいずれかと一致myNum.Contains(myChoice)するかどうかを確認できます。 指定された値が配列で見つかった場合とそうでない場合は、ブール値を返します。myChoicemyNumarray.Containstruefalse

これを次のように使用するようにコードを更新できます。

   //int compareArray = myNum[myChoice - 1]; // This line is no longer needed

    if (myNum.Contains(myChoice))
    {
        Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
    }
    else
    {
        Console.WriteLine("No!  The number {0} is not equal to any of the entered numbers.", myChoice);
    }
于 2012-06-14T02:36:19.527 に答える
1

間違いなく1から10の間の数字を探している場合は、使用する前に

int compareArray = myNum[myChoice - 1];

値が10を超えているかどうかを確認します。例:

while(myChoice > 10)
{
    Console.Write("Please choose a number less than or equal to 10: ");
    myChoice = Int32.Parse(Console.ReadLine());
}

whileタグの代わりにループ内に配置することの利点はif、ユーザーが別の数値を入力すると、の値myChoiceが書き換えられて比較されることを意味します。10を超える数値を入力すると、入力した数値が10以下になるまで応答しPlease choose a number less than or equal to 10.続けます。`その後、プログラムは続行されます。

ただし、固定数の比較ではなく、配列と比較する場合は、次のwhileループを検討してください。

while(myChoice > myNum.Length)
{
    Console.Write("Please choose a number less than or equal to {0}: ", myNum.Length);
    myChoice = Int32.Parse(Console.ReadLine());
}

whileこれは、ループの内容を変更しなくても、任意のサイズの配列で機能します。このシステムを使用するIndexOutOfBoundsことにより、インデックスとして使用するときに1を引く限り、例外が発生しないようにすることができます。

于 2012-06-14T02:31:42.633 に答える
0

最終的な 11 番目の値を比較して、それが 10 個の前のエントリの配列にあるかどうかを判断しようとしていますか?

試す:

for(int i = 0; i < array.length - 1; i++;)
{
    If(array[i] == input)
        return true;
}

 return false;

演習としてやりたかったので、これを完全に自分で実装する方法を理解できるはずです。

編集:誰かがこれをチェックしたり、正しい構文で完成させたい場合は、先に進んでください。この大まかな概要を電話から投稿しました。

于 2012-06-14T02:42:34.130 に答える