あなたのコードをちょっと整理して、あなたがしたいと思うようにしてみてください:
はあなたMain
方法から任意のロジックを抜け出すと、あなたの目標に向かって小さなステップを取る特定のメソッドを記述することから始めましょう。メソッドを小さくするほど、バグを書くのが難しくなります。あなたが学んでいるならば、馬鹿げた小さなものから始まり、自信を持って大きくなる。
[OK]を、番号をユーザに尋ねるの概念があり、のがこれを行う方法を書いてみましょう、その過程で可能な限り堅牢に。覚えておいて、ユーザーはダムです!番号を尋ね、彼らは何でもを入力します:
は
public static int PromptUserForPositiveInteger(string prompt)
{
int number;
Console.Write(prompt);
var input = Console.ReadLine();
while (!int.TryParse(input, out number) ||
number < 0)
{
Console.Write("Input is not a valid number, try again: ");
input = Console.ReadLine();
}
return number;
}
オクラホマので、何このメソッドが行うことはポジティブ整数をユーザーに尋ねるあり、そしてそれは、ユーザが管理するまで有効を入力することをやり続けるだろう番号を入力するか、プラグを引きます。いずれにせよ、私たちは安全です。 int.TryParse
はstring
のうちint
を抽出する安全な方法です。可能であれば番号を返してtrue
を返します。それ以外の場合はfalse
を返します。それが失敗した場合、それはあなたの顔に吹き飛ばされ、何かがむしろ喜んでint.Parse
です。ペストのようなParse
を避けてください、いつもfrendlier TryParse
を使用してください。
また、このメソッドは実装の詳細です。したがって、private
です。あなたのクラスの外の誰もそれを使用する必要はありませんので、表示しないでください。
これを一般化すると、呼び出し元にどのようにしてユーザーに確認するかを指定できるようになります。このメソッドを配列のサイズに制限する必要がある理由はありません。明日はあなたがサルを食べるバナナの数を必要とします。安くて簡単にコードを一般化してください。一般化が難しいときはいつも、あなたはおそらくそれとその無駄な努力を必要としないでしょうか?
次に、int
の配列を作成し、値を入力する必要があります。値は各配列要素のインデックスになります。ああ、しかし待って、私たちは、どんなに馬鹿げたことにもかかわらず、タスクごとにメソッドを作ると言った!ええ、私は知っていますが、不条理ながら小さなものはこれまでにしか行きません。
private static int[] CreatArrayAndSetValuesToIndex(int size)
{
Debug.Assert(size >= 0);
var array = new int[size];
for (var i = 0; i < size; i++)
{
array[i] = i;
}
return array;
}
CreatArrayAndSetValuesToIndex
不合理に長い名前に見えるが、それは方法がを行い、正確に何を告げるかもしれません。わかりやすい名前を使用して略語を避ける。インテリセンスの今、短い難解な名前を使用することには意味がありません。
引数の検証にも注意してください。私は決してこれを十分に強調しません。はあなたのメソッドへの入力を常に検証します!。状況が特定の条件の下で動作するはずでない場合は、これらの条件を避けるために可能な限りすべてを行っていることを確認してください。メソッドはプライベートなので、Debug.Assert
で十分です。それが公共サーフェスの一部だった場合は、適切な例外を投げる必要があります(ArgumentOutOfRange
が適切です)。
private static void PrintOut(int[] array)
{
Console.WriteLine(string.Join(Environment.NewLine, array);
}
は、私はすでに利用可能なツールのここでの利点を撮影した:
なく、少なくとも最後に、我々は我々のコードがうまく機能していることを確認することができるようint
の配列を出力1つの最後の方法自分自身を書いてみましょう枠組み。 string.Join
は、列挙可能なオブジェクト(配列はそのうちの1つ)をとり、指定されたセパレータ(この場合は改行)を持つすべてのメンバの文字列を作成する素晴らしい方法です。
そして今、すべてのthats左はすべて一緒にそれを入れている:
static void Main(string[] args)
{
var size = PromptUserForPositiveInteger("Enter array size: ");
var array = CreatArrayAndSetValuesToIndex(size);
PrintOutArray(array);
Console.ReadLine();
}
そして、我々が行われています!
'Array'はメソッド' void Array(int input) 'の名前に解決されます。あなたは何をしようとしているのですか?あなたのメソッド 'Array'には、動作する配列がありません。 – InBetween
hm、私は尋ねてはならないことに気付いた。私は配列を宣言し、配列を使用しているので、長い間mindboggledされて、それはエラーですか? (キャップに注意してください) 編集:いいえ、それは理由ではありません。 – ImNotCrazy
また、私がしようとしているのは、要素に数値を与えることです。 int [] array =新しいint [num];特定の量の要素を持つ配列を宣言します... array [inum] = num;それらの要素に数値を与えることになっています。 :/ – ImNotCrazy