Уже множество попыток, но проверку не проходит. Не понимаю почему? Вроде бы делает все как нужно, и метод реализован для вычисления NetAddress.
package com.javarush.task.task21.task2101;
import java.util.ArrayList;
import java.util.List;
/*
Определяем адрес сети
*/
public class Solution {
List<String> list = new ArrayList<>();
public static void main(String[] args) {
byte[] ip = new byte[]{(byte) 192, (byte) 168, (byte) 1, 2};
byte[] mask = new byte[]{(byte) 255, (byte) 255, (byte) 254, 0};
byte[] netAddress = getNetAddress(ip, mask);
print(ip); //11000000 10101000 00000001 00000010
print(mask); //11111111 11111111 11111110 00000000
print(netAddress); //11000000 10101000 00000000 00000000
}
public static byte[] getNetAddress(byte[] ip, byte[] mask) {
String thirdIp = String.format("%8s",Integer.toBinaryString(ip[3]<0?ip[3]+256:ip[3])).replace(' ', '0');
String thirdMask = String.format("%8s",Integer.toBinaryString(mask[3]<0?mask[3]+256:mask[3])).replace(' ', '0');
char[] r = new char[8];
for(int i = 0; i < thirdIp.length(); i++){
r[i] = (char) ((byte)thirdIp.charAt(i)&thirdMask.charAt(i));
}
String result = String.valueOf(r);
return new byte[]{ip[0],ip[1], (byte) Integer.parseInt(result), 0};
}
public static void print(byte[] bytes) {
for (int i = 0; i < bytes.length; i++){
String s1 = String.format("%8s",Integer.toBinaryString(bytes[i]<0?bytes[i]+256:bytes[i])).replace(' ', '0');
if(i<bytes.length-1)
System.out.print(s1+" ");
else
System.out.print(s1);
}
System.out.println();
}
}