2016-05-05 12 views
0

「インデックスは配列の境界外です」というエラーが表示されます。このコードはテキストブックから入力したものです。カントはそれに何か間違っているようだ。配列の境界外のC#

class Program 
{ 
    static void Main() 
    { 
     int[] scores = new int[8]; 
     int x; 
     string inputString; 

     for (x = 0; x < scores.Length; ++x) 
     { 
      Write("Enter your score on test {0} ", x + 1); 
      inputString = ReadLine(); 
      scores[x] = Convert.ToInt32(inputString); 
     } 

     WriteLine("\n----------------------------"); 
     WriteLine("Scores in original order: "); 
     for(x = 0; x < scores.Length; ++x) 
      Write("{0, 6}", scores[x]); 

     WriteLine("\n----------------------------"); 
     Array.Sort(scores); 
     WriteLine("Scores in sorted order: "); 
     for(x = 0; x < scores.Length; ++x) 
      Write("{0, 6}", scores[x]); 

     WriteLine("\n----------------------------"); 
     Array.Reverse(scores); 
     WriteLine("Scores in reverse order: "); 
     for(x = 0; x < scores.Length; ++x) ; 
      Write("{0, 6}", scores[x]); 
    } 
} 
} 
+0

デバッガで1行ずつステップ実行します。デバッガの使い方がわからない場合は、それを読んでください。その1つのツールは無駄な時間を無駄にすることなく時間を節約し、プログラムの流れをよく理解するのに役立ちます。 –

+1

'++ x'の代わりに' x ++ 'を試してください – Phaeze

+0

@Phaezeそれはどうでもいいのですか?単一の変数だけの式の場合、接頭辞vs接尾辞は関係ありません。 – Adrian

答えて

5

あなたは8の最終値にインクリメントx除いて何もしない、余分なセミコロン

for (x = 0; x < scores.Length; ++x) ; 
Console.Write("{0, 6}", scores[x]); 

forループの実行を持っているそして、次の行は、xはまだ前から値を持つ実行しますそれは起こります。

修正するには、追加の;を削除してください。

+0

良い目;-)または高速コンパイル:D – BWA

+1

個人的なスタイルの問題として、私は一般に1行のループボディでも{}を使用します。その結果、私の目はその行に引き寄せられました。 –

+1

コードを書式設定するだけです。 Voilà - インデントのないものを見る –

関連する問題