2017-11-11 76 views
0

アレイを作成するための小さなプログラムを作成し、ユーザーが入力した要素、およびすべての要素に数字を入力します。例:3を入力すると、3要素が生成され、要素1には番号1、番号2には番号2が割り当てられます。私は特定のエラーを取得しますが、すべての時間:CS0021は、ここで[]型の表現に「メソッドグループ」 でインデックスを適用することはできませんが、私のコードは次のとおりです。事前にアレイのセットアップでエラーが発生しました - CS0021エラー(C#)

 static void Main(string[] args) 
    { 
     int num; 
     string getNum; 
     getNum = Console.ReadLine(); 
     num = Int32.Parse(getNum); 
     int[] array = new int[num]; 
     Console.WriteLine("Array created with {0} elements.",num); 
    } 
    static void Array(int input) 
    { 
     int num = 1; 
     int inum = input; 
     while(inum >= input) 
     { 
      Array[inum] = num; 
      Console.WriteLine("{0}",input); 
      Console.WriteLine("{0}", num); 
      inum = inum - 1; 
      num = num + 1; 
     } 

おかげであなたは私を助けることにした場合:)

+1

'Array'はメソッド' void Array(int input) 'の名前に解決されます。あなたは何をしようとしているのですか?あなたのメソッド 'Array'には、動作する配列がありません。 – InBetween

+0

hm、私は尋ねてはならないことに気付いた。私は配列を宣言し、配列を使用しているので、長い間mindboggledされて、それはエラーですか? (キャップ​​に注意してください) 編集:いいえ、それは理由ではありません。 – ImNotCrazy

+0

また、私がしようとしているのは、要素に数値を与えることです。 int [] array =新しいint [num];特定の量の要素を持つ配列を宣言します... array [inum] = num;それらの要素に数値を与えることになっています。 :/ – ImNotCrazy

答えて

0

あなたのprgoramでArrayは方法です。

したがって、Arrayはメソッドであり、メソッドにインデクサー([])を適用することはできませんので、Array[inum] = num行にエラーがあります。

あなたがそれ欲しいものを、次のような何かを達成する最も簡単な方法:

:あなたは、単純なLINQのステートメントを使用することができ

static void Main(string[] args) 
{ 
    int num; 
    string getNum; 
    getNum = Console.ReadLine(); 
    num = Int32.Parse(getNum); 
    int[] array = Array(num); // Change this to call the Arrra(int num) method 
    Console.WriteLine("Array created with {0} elements.",num); 
} 

さもない:あなたの主な方法で

static int[] Array(int input) // Change return type to return an array of integers 
{ 
    var result = new int[input]; // Declare a local variable to hold a new array of size input. 

    // Change while to basic for loop 
    for (int i = 0; i < input; i++) 
    { 
     result[inum] = i + 1; // set elements of the result array. 
     Console.WriteLine("{0}",input); 
     Console.WriteLine("{0}", i); 
    } 
} 

Enumerable.Range(1, input).ToArray(); 
+0

ありがとう、メソッドをArrayからCreateArrayに変更しました。どうもありがとう! – ImNotCrazy

0

あなたのコードをちょっと整理して、あなたがしたいと思うようにしてみてください:

はあなた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.TryParsestringのうち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(); 
} 

そして、我々が行われています!

関連する問題