2016-10-19 6 views
0

私はC++でコードを作成していますが、現在はJavaのネットワーク管理に関連するプロジェクトに取り組んでいます。ここでa[i].addressesNetworkInterfaceAddress[](つまり配列)を返します。しかし、このようにコピーしようとするとエラーになります。アレイを別のアレイに格納できないのはなぜですか?

NetworkInterface[] a; 
a=JpcapCaptor.getDeviceList(); 
NetworkInterfaceAddress[] b=new NetworkInterfaceAddress[a.length]; 
int i=-1; 
while(++i<a.length) 
b[i]=a[i].addresses; 

これはエラーを与える:

incompatible types: NetworkInterfaceAddress[] cannot be converted to NetworkInterfaceAddress. 
+3

[i] .addresses; NetworkInterfaceAddressの配列を返します。あなたは確認できますか? –

+0

はい、http://jpcap.gitspot.com/javadoc/jpcap/NetworkInterface.html#addressesのリンクに従っています。そして私はそれらのアドレスをすべてbに保存したいと思っています。 –

+0

これで、この 'NetworkInterfaceAddress [] b = new NetworkInterfaceAddress [a.length];の配列にコピーする必要があります。各列に1つのNetworkInterfaceAddressのインスタンスを持つことができます。あなたはそこにそれを保管することはできません。 –

答えて

0

配列bは、それがタイプNetworkInterfaceAddressobjectsを格納できることを意味NetworkInterfaceAddress配列、です。もしそうNetworkInterfaceAddress配列を返しa[i].addresses、前記しかしながら、b代わりオブジェクトタイプNetworkInterfaceAddressののタイプNetworkInterfaceAddressアレイを記憶することができるべきです。そのためには、配列またはの配列の配列であるである必要があります。そして

NetworkInterfaceAddress[][] b = new NetworkInterfaceAddress[a.length][]; 

に変更Bの定義、アレイ内a[i].addressesを添加しながら、a[i].lengthに、a[i].addressesを保持しなければならないこと、B内の現在の配列長さを割り当てます。

while(++i<a.length){ 
    b[i] = new NetworkInterfaceAddress[a[i].addresses.length]; 
    b[i] = a[i].addresses; //b[i] is an array itself 
} 
+2

'b [i]'に2回割り当てているので、最初の値は直ちに上書きされます。 (現在のコードではない)配列の内容をコピーするか、(2番目の割り当てが十分である)配列参照をコピーするのに十分であるかを決定します。 –

+0

@ OleV.V。ええ、実際には、私は2番目の課題だけで何をしたいのですか?私はそれが、私がやろうとしていることだけでそれを行うことができることを理解していませんでした。私はオブジェクト配列の 'NullPointerException'を防ぐことに慣れています。これはギザギザの配列を心配する必要はありません。だから私は最初に 'b [i]' – progyammer

+0

を初期化しました。 IDEは割り当てられた最初の値が決して使用されないことを伝えなければなりません(またはあなたは警告を正しく設定していません:-) –

関連する問題