Array mit Dualzaheln befüllen

crazyd

Mitglied
Moin,

ich probier jetzt schon etwas länger rum ohne auch nur einen Ansatz für mein Problem zu finden. Villeicht kann mir ja von euch jemand einen Tipp geben. Es geht um folgendes Problem:

Ich will ein zweidimensionales Array erstellen, die Länge der ersten Dimension wird vom Benutzer vorgegeben. Die zweite Dimension wird je nach größe der 1. Dim. errechnet: Array[n,2^(n+1)]. Bis hier ist alles klar, aber ich will dieses Array jetzt mit Dualzahlen befüllen. In der Ersten Zeile soll 1 (Dez) stehen, also (n-1) mal die "0" und dann "1". In der Zweiten Zeile soll 2 (Dez) stehen also (n-2) mal "0" dann "1" und dann wieder "0".

Code:
[0][0][0][0]
[0][0][0][1]
[0][0][1][0]
[0][0][1][1]
[0][1][0][0]
[0][1][0][1]
[0][1][1][0]
[0][1][1][1]
[1][0][0][0]
[1][0][0][1]
[1][0][1][0]
[1][0][1][1]
[1][1][0][0]
[1][1][0][1]
[1][1][1][0]
[1][1][1][1]

Gibt es da einen Algorithmus, der mir das Array richtig befüllt? Oder könnt ihr mir einen Tipp geben, wie ich da am besten ran gehen sollte?

Bin für jeden Tipp dankbar.

Viele Grüße!
 
Java:
	public static void main(String[] args) throws Exception {
		int[][] array = new int[16][4];
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				array[i][array[i].length-j-1] = testBit(i, j) ? 1 : 0;
			}
		}
		for (int[] is : array) {
			System.out.println(Arrays.toString(is));
		}
	}

	private static boolean testBit(int n, int pos) {
		return (n & 1 << pos) != 0;
	}
 
Viel Spaß damit... (auch wenns von der Performance her nicht die perfekteste Lösung ist^^)
Java:
	public static void main(String[] args) {
		for(int i=0;i<20;++i){
			System.out.println(Arrays.toString(asArray(i,10)));
		}
	}

	private static int[] asArray(int number, int length) {
		int[] result = new int[length];
		for(int i=0;i<result.length;++i){
			result[result.length-i-1] = (int) ((number/(Math.pow(2,i))) %2);
		}
		return result;
	}
 
Danke für eure Antworten! Leider blicke ich da nur teilweise durch. 🙁
Aber ich versuch es einfach mal zu verstehen und melde mich auf jeden Fall noch mal wenn ich da auch später noch nicht alles verstehe.

Grüße & Danke
 
z.B. kann der Code auch so aussehen:

Java:
public class BinaryGrid {
	
	public static int[][] fill(int n) {
		assert n>0:"Must be greater than 0";
		int[][] grid = new int[(int)Math.pow(2,n)][n];
		for(int i=0;i<grid.length;i++) {
			String temp = Integer.toBinaryString(i);
			int linelen = grid[i].length-1;
			for(int j=temp.length()-1;j>=0;j--) {
				grid[i][linelen] = Integer.parseInt(String.valueOf(temp.charAt(j)));
				linelen--;
			}
		}
		return grid;
	}
}

Dann brauchst du auch kein Algorithmus und so...
 
statt
Java:
Integer.parseInt(String.valueOf(temp.charAt(j)))
kannst du auch
Java:
temp.charAt(j)-'0'
schreiben.
 

Zurück
Oben