2016-10-19 2 views
0

저는 처음부터 C++로 코딩했지만 지금은 Java의 네트워크 관리와 관련된 프로젝트에서 작업하고 있습니다. 여기 a[i].addressesNetworkInterfaceAddress[] (즉, 배열)을 반환합니다. 그러나 이렇게 복사하려고하면 오류가 발생합니다.배열을 다른 배열에 저장할 수없는 이유는 무엇입니까?

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];에 복사해야합니다. 각 열에 NetworkInterfaceAddress 인스턴스를 하나씩 가질 수 있습니다. 그래서 거기에 저장할 수 없습니다. –

답변

0

배열 b이 유형의 NetworkInterfaceAddressobjects를 저장할 수 있음을 의미하는 NetworkInterfaceAddress 배열이다

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

이 오류를 준다. 당신이 말한 그러나, a[i].addresses 배열 그래서 NetworkInterfaceAddress을 반환 b배열 유형 NetworkInterfaceAddress 대신 객체 타입 NetworkInterfaceAddress의를 저장할 수 있어야한다. 이를 위해서는 배열 또는 배열 배열이 이고 배열이 일 것입니다. 이어서

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

로 변경 B의 정의는 배열 a[i].addresses을 첨가하면서, a[i].lengtha[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]'에 두 번 할당하면 첫 번째 값이 바로 덮어 쓰여집니다. 배열 내용 (현재 코드에서 사용하지 않음)을 복사할지 또는 두 번째 할당이 충분한 배열 참조를 복사하는 것으로 충분할지 결정하십시오. –

+0

@ OleV.V. 그래, 사실 두 번째 임무 만 하는게 좋을거야. 나는 그것이 내가하려고하는 것을 혼자서 할 수 있다는 것을 깨닫지 못했다. 나는 객체 어레이에 대해'NullPointerException'을 막는 것에 익숙해 져 있는데, 나는 지그재그 배열에 대해 걱정할 필요가 없다. 이것이 내가 처음'b [i]' – progyammer

+0

을 초기화 한 이유입니다. IDE는 할당 된 첫 번째 값이 사용되지 않는다고 알려야합니다 (또는 경고를 올바르게 설정하지 않았 음 :-) –

관련 문제