これは些細な質問かもしれませんが、配列宣言のこの構文に出くわしました。
void someFunction(int n){
int[] myArray = new int[ n == 0 ? 1 : n ];
...
}
運が悪かったのに何が起こっているのかを理解するために、いくつかのチュートリアルをオンラインで検索してみました。
右括弧内の表現を誰かが説明できますか?また、そのようなものが通常使用されるのはいつですか?
正しい式は、「if/(then)/else」への「ショートカット」です
式の最初の部分は「if」、つまり条件であり、明確にするために括弧内に含めることができます (必須ではありません)。
次に ? が来て、「条件オーバー、結果は?」と述べています。その後に 'true' ステートメントが続き、コロンの後に 'else' ステートメントが続きます。
つまり、n == 0 の場合はサイズ 1 の配列を割り当て、それ以外の場合は n 要素を割り当てます。
これはかなり一般的な c 構文であり、変数の割り当てを短縮する優れた方法ですが、定義ごとの配列とは実際には何の関係もありません。
これは基本的に、if/else のシンタックス シュガーです。ここにリンクがあります
三項演算子です。の前のブール文?
が評価され、それが true の場合、式は の前の値に:
評価され、そうでない場合は 2 番目の値に評価されます。
長さ 5 の配列の簡単な宣言を次に示します。
int[] myArray = new int[5];
n == 0 ? 1 : n
数値を提供します ( 1
ifn == 0
およびn
if not )。これは三項演算子の例です。
そう
int[] myArray = new int[ n == 0 ? 1 : n ];
の省略形です
int[] myArray;
if (n == 0) {
myArray = new int[1];
} else {
myArray = new int[n];
}
n が 0 かどうかを調べるために Java の三項演算子 (?) が使用されます。n が 0 の場合は、サイズ 1 の配列を作成します。
n が >1 の場合、それを使用して配列を作成します。Java では長さ 0 の配列は合法であるため、著者がここで何を意味しているのかわかりません。
in の不正な値から保護するために をチェックしていたはずn > 0 ? n :1
なので、負の値でもサイズ 1 の配列を取得します。
@ATaylor と @SperanskyDanil が言ったように、
Syntax はsize 1の配列を作成し、 sizeの配列をn=0
作成します。
下の図に示すように。n
n != 0