2

これは些細な質問かもしれませんが、配列宣言のこの構文に出くわしました。

   void someFunction(int n){
      int[] myArray = new int[ n == 0 ? 1 : n ];
      ...
   }

運が悪かったのに何が起こっているのかを理解するために、いくつかのチュートリアルをオンラインで検索してみました。
右括弧内の表現を誰かが説明できますか?また、そのようなものが通常使用されるのはいつですか?

4

6 に答える 6

5

正しい式は、「if/(then)/else」への「ショートカット」です

式の最初の部分は「if」、つまり条件であり、明確にするために括弧内に含めることができます (必須ではありません)。

次に ? が来て、「条件オーバー、結果は?」と述べています。その後に 'true' ステートメントが続き、コロンの後に 'else' ステートメントが続きます。

つまり、n == 0 の場合はサイズ 1 の配列を割り当て、それ以外の場合は n 要素を割り当てます。

これはかなり一般的な c 構文であり、変数の割り当てを短縮する優れた方法ですが、定義ごとの配列とは実際には何の関係もありません。

于 2012-09-04T04:51:18.897 に答える
2

これは基本的に、if/else のシンタックス シュガーです。ここにリンクがあります

于 2012-09-04T04:50:32.330 に答える
1

三項演算子です。の前のブール文?が評価され、それが true の場合、式は の前の値に:評価され、そうでない場合は 2 番目の値に評価されます。

于 2012-09-04T04:51:09.503 に答える
1

長さ 5 の配列の簡単な宣言を次に示します。

int[] myArray = new int[5];

n == 0 ? 1 : n数値を提供します ( 1ifn == 0およびnif not )。これは三項演算子の例です。

そう

int[] myArray = new int[ n == 0 ? 1 : n ];

の省略形です

int[] myArray;

if (n == 0) {
  myArray = new int[1];
} else {
  myArray = new int[n];
}
于 2012-09-04T04:51:24.377 に答える
1

n が 0 かどうかを調べるために Java の三項演算子 (?) が使用されます。n が 0 の場合は、サイズ 1 の配列を作成します。

n が >1 の場合、それを使用して配列を作成します。Java では長さ 0 の配列は合法であるため、著者がここで何を意味しているのかわかりません。

in の不正な値から保護するために をチェックしていたはずn > 0 ? n :1なので、負の値でもサイズ 1 の配列を取得します。

于 2012-09-04T04:52:19.270 に答える
1

@ATaylor と @SperanskyDanil が言ったように、
Syntax はsize 1の配列を作成し、 sizeの配列をn=0作成します。 下の図に示すように。nn != 0

ここに画像の説明を入力

于 2012-09-04T05:56:19.910 に答える