2012-03-22 26 views
3

私はint配列を持っています。別の配列inShort[]があります。 inInt[]inShort[]に変換するにはどうすればよいですか?int []配列をJavaのshort []配列に変換します。

inShort[]に新しいメモリを割り当てる必要がありますか?inInt[]にキャストできる方法はありますか?

int inInt[] = new int[100]; 
short inShort[]; 
+2

まず、あなたがに大きなタイプを保存しようとしているとして、コンパイラの警告が表示されます小さい方。第二に、はい、short型の新しい配列を作成しなければならないので、値を一方から他方にコピーすることができます。私が知る限り、配列を再入力することはできません。 –

答えて

10
short inShort[] = new short[100]; 

for(int i = 0; i < 100; i++) 
{ 
    inShort[i] = (short)inInt[i]; 
} 

ただし、INT(すなわち-32,768未満又は32,767より大きい)ショートの範囲外である場合、短いオーバーフローする可能性が非常に高いです。 intは-2,147,483,648から2,147,483,647までの範囲であるため、実際にはshortをオーバーフローさせるのは実際は簡単です。

+0

私はこれと正反対の状況があると仮定します。すなわち、私は短い[]配列を持ち、int []配列に変換する必要があります。同様の手順に従う必要がありますか? –

+0

@user - そうです。それをやる。 –

0

これは、int型がshortと比べてより多くのメモリを使用するため、情報が失われる可能性があります。 こう言ったように、Lirikあなたは情報を失うまで、彼の方法を使うことができます。 変換する整数がshort型の範囲にあることを確認する必要があります。

1

変換する前にinShort []にメモリを割り当てる必要があると思います。
ただし、変換する必要はありません。あなたのアプリケーションでメモリが重要な場合、または変換後にinInt []を解放したくない場合。
だけで表現してinInt []の要素を使用する 『(ショート)inInit [X]』

1

はどのようにして、[] inShortにinInt []を変換することができますか?

適切なサイズの短絡配列を作成し、内容をコピーする必要があります。配列をコピーするためのユーティリティメソッドはありますが、プリミティブの配列をコピーして同時に値を変換するものは認識していません。したがって、明示的にforループを使用して要素のコピーを行う必要があります。

それは[] inShortのための新しいメモリを割り当てる必要がある....

はい。既存の正しいタイプとサイズの配列を再利用する準備ができていない限り、新しい配列が必要です。

または私はinInt []にキャストする方法がありますか?

いいえプリミティブ型の配列を別のプリミティブ型配列にキャストすることはできません。 Java言語はそれを許可しません。


(そして、記録のために、これはそれぞれ、すべてのJava配列・オブ・プリミティブ型に適用されます。)

関連する問題