X
Xyz1
Gast
Mir wurde ein Programm zugesendet und meine Frage wär jetzt, wie ich die doppelte Ausgabe verhindere...
Zusatzfrage: Wird das Programm immer anhalten? (bitte begründen)
Java:
import java.util.Arrays;
import java.util.Scanner;
public class Unittest {
private static Scanner s1;
private static String p1, p2;
public static void main(String[] args) {
s1 = new Scanner(System.in);
System.out.println("Adresse 1: ");
p1 = s1.nextLine();
System.out.println("Adresse 2: ");
p2 = s1.nextLine();
byte[] ip1 = ipv4ToBytes(p1);
byte[] ip2 = ipv4ToBytes(p2);
// Thread
Runnable r1 = new Runnable() {
@Override
public void run() {
byte[] a = ip1;
while (true) {
String s = bytesToIpv4(a);
System.out.println("Die Adresse Thread 1 ist " + s);
synchronized (s1) {
if (isNotEquals(a, ip2)) {
count(a);
} else {
break;
}
}
}
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
byte[] a = ip2;
while (true) {
String s = bytesToIpv4(a);
System.out.println("Die Adresse Thread 2 ist " + s);
synchronized (s1) {
if (isNotEquals(a, ip1)) {
count2(a);
} else {
break;
}
}
}
}
};
new Thread(r1).start();
new Thread(r2).start();
}
public static boolean isNotEquals(byte[] a, byte[] b) {
return !Arrays.equals(a, b);
}
public static byte[] ipv4ToBytes(String ip) {
String[] parts = ip.split("\\.");
byte[] result = new byte[4];
for (int i = 0; i < result.length; i++) {
result[i] = (byte) Integer.parseInt(parts[i]);
}
return result;
}
public static void count(byte[] value) {
int i = value.length;
do {
i--;
value[i]++;
} while (value[i] == 0);
}
public static void count2(byte[] value) {
int i = value.length;
do {
i--;
value[i]--;
} while ((value[i] & 0xFF) == 255);
}
public static String bytesToIpv4(byte[] value) {
return String.format("%d.%d.%d.%d", value[0] & 0xff, value[1] & 0xff, value[2] & 0xff, value[3] & 0xff);
}
}
Code:
Adresse 1:
255.255.254.240
Adresse 2:
255.255.255.5
Die Adresse Thread 1 ist 255.255.254.240
Die Adresse Thread 2 ist 255.255.255.5
Die Adresse Thread 2 ist 255.255.255.4
Die Adresse Thread 1 ist 255.255.254.241
Die Adresse Thread 2 ist 255.255.255.3
Die Adresse Thread 1 ist 255.255.254.242
Die Adresse Thread 2 ist 255.255.255.2
Die Adresse Thread 1 ist 255.255.254.243
Die Adresse Thread 2 ist 255.255.255.1
Die Adresse Thread 2 ist 255.255.255.0
Die Adresse Thread 2 ist 255.255.254.255
Die Adresse Thread 2 ist 255.255.254.254
Die Adresse Thread 2 ist 255.255.254.253
Die Adresse Thread 2 ist 255.255.254.252
Die Adresse Thread 2 ist 255.255.254.251
Die Adresse Thread 2 ist 255.255.254.250
Die Adresse Thread 2 ist 255.255.254.249
Die Adresse Thread 2 ist 255.255.254.248
Die Adresse Thread 2 ist 255.255.254.247
Die Adresse Thread 1 ist 255.255.254.244
Die Adresse Thread 1 ist 255.255.254.245
Die Adresse Thread 1 ist 255.255.254.246
Die Adresse Thread 2 ist 255.255.254.246
Zusatzfrage: Wird das Programm immer anhalten? (bitte begründen)