Problem mit einer Schleife

Fazzoletti9

Mitglied
Hallo,
ich komme nicht weiter. Was ich mir wünsche was ein teil meines Programms machen soll ist folgendes: ich übergebe an eine Methode ein int array z.b. {2,4,1,3,2} und dieses Array will ich dann in Boolean arrays umformen und zwar in so viele boolarrays wie das int array lang ist, also in meinem Beispiel 5 verschiedene bool arrays, die jeweils wieder eine bestimmte Länge haben und zwar genau die wenn man alle zahlen im int array addiert. (in meinem Beispiel jetzt 12) Die Bool arrays die am ende herauskommen sollen sollen so aus sehen:
b1 = {true, true, false, false, false, false, false, false, false, false, false, false}
b2 = {false, false, true, true, true, true, false, false, false, false, false, false}
b3 = {false, false, false, false, false, false, true, false, false, false, false, false}
b4 = {false, false, false, false, false, false, false, true, true, true, false, false}
b5 = {false, false, false, false, false, false, false, false, false, false, true, true}

also für das erste array wird die erste zahl angeguckt dann so oft true wie groß die zahl ist. Beim zweiten array erst mal False so oft wie die erste zahl ist und dann true so oft wie die zweite zahl ist und Rest false. drittes array false so oft wie die ersten beiden zahlen addiert sind dann true so oft wie die dritte zahl ist und dann Rest false. und so weiter, und ich probiere jetzt seit mehreren Stunden und komme auf keine Lösung ich hoffe ihr könnt mir helfen, ich hoffe das Problem ist verständlich.
 
Java:
int b = 0;
while(b<i){                                                        //i ist die länge vom Int Array
     boolean alpha;
     if(b<j[a])alpha = true;else{alpha = false;}        //j[a] ist der eingetragene Wert vom int array
     _singleArray[a].setBelonging(alpha,b);              // bool array erstellen wert alpha pos b
     b++;
}

damit baue ich bool array aber immer mit den True werten nur am Anfang ich habe keine Ahnung wie ich es machen kann, dass ich zuerst gucke ob ich erst false setzten muss und dann erst true.
 
Java:
public class SchleifenHA {
	public static void main(String[] args) {
		int[] input = {2,4,1,3,2};
		boolean[][] result = doIt(input);
		for(boolean[] b : result){
			System.out.println(Arrays.toString(b));
		}
	}

	private static boolean[][] doIt(int[] input) {
		int sum = getSumUntil(input,input.length);
		boolean[][] result = new boolean[input.length][sum];
		for(int i=0;i<input.length;++i){
			for(int e=0;e<sum;++e){
				result[i][e] = e>=getSumUntil(input,i) && e<getSumUntil(input,i+1);
			}
		}
		return result;
	}
	
	private static int getSumUntil(int[] array, int until){
		int sum = 0;
		for(int i=0;i<until;++i){
			sum += array[i];
		}
		return sum;
	}
}
 
wenn wir schon komplettlösungen posten:

Java:
public class Test { 
	public static void main( String[] args ) {
		int[] array = {2,4,1,3,2};
		boolean[][] test = getBoolArrays( array );
		for( int i = 0; i < test.length; i++ ) {
			System.out.print("b" + i + " =\t");
			for( int j = 0; j < test[0].length; j++ ) {
				System.out.print(test[i][j] + "\t");
			}
			System.out.print("\n");
		}
	}
	public static boolean[][] getBoolArrays( int[] array ) {
		int sum = 0;
		for( int i : array ) 
			sum += i;
		boolean[][] bools = new boolean[array.length][sum];
		sum = 0;
		for( int i = 0; i < bools.length; i++ ) {
			sum += array[i];
			for( int j = sum - array[i]; j < sum; j++ ) {
				bools[i][j] = true;
			}		
		}
		return bools;
	}
}

main ist nur zu Veranschaulichung

edit: Schandro war zwar schneller, dafür wird meine etwas performanter sein. er ruft ja in jeder unterschleife 2x die sum methode auf, die dann nochmal über das komplette array interiert (bzw von until abhängig). Aber gut.. das nimmt sich nicht viel (zumindest bei so kleinen arrays..)
 
Zuletzt bearbeitet:
naja. wir wollen dir auch helfen und das tun wir eigentlich nicht, wenn wir dir komplettlösungen posten.

was ist dir denn unklar?

benutzt du eine IDE? Wenn ja debugge den code schritt für schritt. dann sollte es klarer werden, was passiert.
 
Jau ich benutze Eclipse z.b. habe ich keine Ahnung was "for( int i : array )" macht. Das mit dem Zweidimensionalem Array verstehe ich glaube ich, wär ich aber im leben nicht drauf gekommen.
Ist das Problem was ich da hatte so etwas normales? Braucht man das öffters mal, dass ihr da so schnell eine meines erachtens nach so komplexe lösung zu hattet?
Gruß
Ben
Werde mal Debuggen gehen
 
Braucht man das öffters mal, dass ihr da so schnell eine meines erachtens nach so komplexe lösung zu hattet?
Auf jedenfall... aber dein Problem is nich wirklich "komplex", sondern ehrlich gesagt ziemlich einfach. Sobald man ein paar Jahre Erfahrung hat weiß man im Unterbewusstsein schon die komplette Lösung und muss diese nurnoch "abtippen".
 
das mit dem for ( int i : array) ist im Grunde ganz einfach.

Das bedeutet so viel wie:
für (jedes i vom Typ Integer in Array)
{
mach das hier
}

Also das gleiche wie
for ( int i = 0; i<array.length; i++)
 

Zurück
Oben