Schleifen wirrwar...helft mir :/

Alex Großmann

Erfahrenes Mitglied
Hiho!
Ich gebe in einem Programm eine Start IP und eine End IP über einen String ein.
Dann filter ich die "." raus und wandel das ganze in int um, damit die Zahlenwerte auch wirklich da sind...

so!
Nun mag ich eine Schleife erstellen die von der Start IP bis zur End IP hochzählt. Das ist ja noch easy! Aber jeder "Block", d.h. jeder Bereich in einer IP (also gibts 4, sind durch eben den "." getrennt) soll bis 255 gehen, dann auf 0 zurück gehen und im nächsten Block 1 hoch zählen, dies auch wiederum solang bis 255 oder eben End IP erreicht ist.... könnt Ihr mir da helfen? Wäre echt nett!
Hier meine kläglichen Versuche:
Code:
for (int i=a ;i <= a1; i++){								
				
											
				for (int i1=b; i1 <= b1; i1++){
					
					
					for (int i2=0; i2 <= 255; i2++ ){
						
						
						for (int i3=0; i3 <= 255; i3++){
						
							
							System.out.println(i + "." + i1 + "." + i2 + "." +i3);
						
							
						}
					}
				}
			}
 
Dürften wir auch erfahren was du mit diesem Unsinn vorhast damit wir nicht umsonst unsere Zeit verschwenden ?
 
Hi Alex,

dein Ansatz ist schlimmer als wirrwar ;).
Wenn du in einem Loop immer wieder den selben Check machen musst, bieten sich rekursive Methodenaufrufe an - zumal der Code auch kürzer und lesbarer wird (gestrippt würde ein 10-Zeiler rauskommen). Ich hab mal schnell was zusammengetippt was in den Grundzügen deinen Anforderungen entsprechen sollte. Exception im 2. Testcase ist gewollt, wenn du willst, kannst du die Zeilen ja noch um eine weitere Prüfung erweitern.
Meine Lösung sieht jetzt so aus:
Java:
package de.jeteo.tutorials.java.incip;
import java.util.Arrays;


public class IncIP {

	public static void main(String[] args) {
		// from m to n
		test(new int[] {192, 255, 254, 1}, new int[] {193, 0, 20, 255});
		// from m to end
		test(new int[] {255, 255, 254, 200}, new int[] {-1, -1, -1, -1});
	}
	
	static void test(int[] startIp, int[] endIp) {
		while (!Arrays.equals(startIp, endIp)) {
		    System.out.println(startIp[0] + "." + startIp[1] + "." + startIp[2] + "." + startIp[3]);
		    inc(startIp, 3);
		}
	    System.out.println(startIp[0] + "." + startIp[1] + "." + startIp[2] + "." + startIp[3]);
	}

	static void inc(int[] ip, int idx) {
		if (ip[idx] < 255) {
			ip[idx]++;
		} else {
		    ip[idx] = 0;
		    inc(ip, --idx);
		}
	}

}

Melde dich wenn was nicht passen sollte ;).

Grüße, K.
 
Zuletzt bearbeitet:
Einwandfrei! Danke dir :)
Eine Frage noch, für was ist m to end? Wenn man das 1. Festlegt gehts perfekt (wie ich es brauche)!
Hatte noch einen Ansatz mit while Schleifen aber hier ist das echt meisterhaft gelöst :)
 

Neue Beiträge

Zurück