0

宿題: 次のコードで範囲外を取得してインデックスを作成しています。char絞首刑のゲームで、当てた文字を配列で追跡しています。

ここに私が作った仮定があります:

  1. char[] displayGuesses = new char[26];呼び出し元のメソッドでは、以下のメソッドにパラメーターとして渡される未入力の配列 ( ) がありchar[] usedLettersます。
  2. 文字推測の最初の反復では、配列は空になります。
  3. 長さは0になります。
  4. パラメータを入力usedLetters[0]letterGuessedます。
  5. 次回は、配列の長さが1になるので、usedLetters[1]データが取り込まれます...などです。

    public char[] trackUsedLetters(char letterGuessed, char[] usedLetters)
    {
        int letterIndex = usedLetters.Length;
        usedLetters[letterIndex] = letterGuessed;  
        return usedLetters;
    }
    

起こっていると思われることがいくつかあります。

  1. 最初の実行での長さを取得しようとするとusedLetters、空の配列はゼロではなく null を返します。ブーム。立入禁止で。
  2. 26 メンバーで定義された空の配列を渡すと問題が発生します...? しかし、その問題が何であるかさえわからないので、関連する結果を得るために何をグーグルするべきかわかりません。
  3. スコープに問題がある可能性があります。ループを使用していますが、Java の同様の質問へのこのリンクを見つけました。Java ユーザーが何を求めていたのかはよくforわかりませんが、いくつかの問題は聞き覚えがありました。

これを見て、これを解決するための正しい方向に向けるために、2 番目の目が必要です。

4

3 に答える 3

4

C#仕様によると:(強調鉱山)

1.8 配列

配列型は参照型であり、配列変数の宣言は単に配列インスタンスへの参照用にスペースを確保します。実際の配列インスタンスは、実行時に new 演算子を使用して動的に作成されます。new 操作は、新しい配列インスタンスの長さを指定します。この長さは、インスタンスの存続期間中固定されます。配列の要素のインデックスは 0 から長さ - 1 までの範囲です。 new 演算子は、配列の要素をデフォルト値に自動的に初期化します。たとえば、すべての数値型ではゼロ、すべての参照型では null です。

char データ型のデフォルトを '\0' にするデフォルト値

于 2013-04-13T03:21:26.227 に答える
1

List<char>成長できる(with Add)メソッドが欲しいようです。

配列のサイズは固定されており、次のコード (サンプルにあります) は常に範囲外の例外をスローします。これは、配列の最後の要素を超えて要素にアクセスしているためです。

usedLetters[usedLetters.Length] = 'c';

配列の長さの詳細:

// newArray - array of 0 chars. newArray.Length is 0
var newArray = new char[0]; 

// nullArray not created, nullArray.Length will throw NullReferenceExcetption
char[] nullArray = null; 

// defaultArray = array of 26 characters, each value 0.
// defaultArray.Length is 26;
char[] defaultArray = new char[26];
于 2013-04-13T02:49:12.913 に答える
0

新しい配列を定義するが、その中の項目を手動で初期化しない場合、配列に含まれる型のデフォルト値で自動的に初期化されます。あなたの場合、文字配列を作成しています。char のデフォルト値は '\0' またはヌル文字です。

これは、配列が真に「空」になることは決してないことを意味します。26 スロットの配列を定義すると、新しい配列を作成しない限り、常にその長さになります。

于 2014-01-26T00:13:54.577 に答える