2D Array in 1D konvertieren??

Paddy1212

Mitglied
Hey Leute =)

ich bin noch absoluter Anfänger und wollte fragen wie ich 2d arrays in 1d arrays umwandeln kann...
vllt hätte auch jmd noch ein kleines Beispiel damit ich es mir genau anschauen und vorallem verstehe.
wäre echt super, danke schonmal

Lg Paddy
 
Kommt ja ganz drauf an was du damit erreichen willst:
Code:
X00 X01 X02
X10 X11 X12
kann zu:
X00
X10
X01
X11
X02
X12
werden, oder zu:
X00
X01
X02
X10
X11
X12
 
ich soll ein programm schreiben, dass 2 dimensionales arrays in ein 1 dimensionale umwandelt, jedoch finde ich einfach den ansatz nicht.... sehe wohl vor lauter Bäumen den Wald nicht 🙁
Java:
public static int[] convertArrayTo1D(int[][] input)

das wäre der teil nachdem wir dann etwas einfügen müssen
 
ich glaube ich verstehe einfach die frage wohl nicht, deswegen bin ich voll am falschen dampfer ... im kommentar steht noch :
Java:
	/********************\
	 * Expected output: *
	 ********************
##### From 2D to 1D #####
[[1, 2, 3, 4], null, [6, 7, 8, 9, 10]]
----------
[1, 2, 3, 4, 6, 7, 8, 9, 10]

danke für eure antworten =) is echt super nett
 
...?

Java:
public class Classname
{
	public static void main(String[] args) 
	{
		int[][] array2D = new int[5][10];
		array2D[0][0] = 5;
		array2D[3][0] = 3;
		array2D[0][1] = 1;
		array2D[2][4] = 2;
		
		int[] array1D = new int[array2D.length * array2D[0].length];
		for(int i = 0, k = 0; i < array2D.length; i++)
			for(int j = 0; j < array2D[0].length; j++, k++)
				array1D[k] = array2D[i][j];
	}
}
 
Also doch eine Hausaufgabe 😉
Java:
int count=0;
for (int i=0;i<input.length;i++) {
  if (input[i]!=null) {
    for (int j=0;input[i].length;j++) {
      count++;
    }
  }
}
int[] oneDarray = new int[count];
//und hier wieder ähnlich wie oben durchlaufen, nur das jetzt die wert aus input dem oneDarray zuweist.
... ohne es getestet zu haben
 
ich danke euch allen... etz kann ich mich in die anderen aufgaben viel besser rein und kann jetzt mal versuchen das ganze richtig zu verstehen =) werde mich etz mal die nacht dran setzen...
 
und ja es ist eine hausaufgabe.... aber nur der kleine Anfang 🙁 leider wird es noch viel schwerer :/ doch ich war da etz paar stunden dran... aber ich hab einfach keinen Anfang gefunden, weil ich denke ich die Frage einfach nicht wirklich kapiert habe
 
könnte man das ganze nicht mit na while-schleife machen? nur wüsst ich jez auf die schnelle nicht wie

Jede Loop-berechenbare Funktion ist auch While-berechenbar 😀 Also gehen würde das schon, läuft aber auf:
Java:
int i=0;
while (i<input.length) {
  //machwas
  i++;
}
hinaus, was wiederum eine andere Form der for-Schleife wäre, also nicht ganz so sinnvoll.
 
Zuletzt bearbeitet:
Hallo,

ich hab beim obigen Programm das Problem das ich nen
java.lang.NullPointerException- Fehler bekomm.

Das es daran liegt das ein Wert des arreys null ist weiß ich bereits, aber wie kann das Programm zum laufen bringen, obwohl ein Wert null, sprich unbekannt ist ?

Lg
 
Jetz kann ich mich in die anderen aufgaben viel besser rein und kann jetzt mal versuchen das ganze richtig zu verstehen =)
ja sicher... das ist ein trugschluss. so simple beispiele lesen bring eigentlich gar nix, man muss schon selber versuchen das zu lösen.. fremde beispiele verstehen ist viel schwerer als sie selber zu lösen...
 
welche Referenzen?

array2D[j];
wenn array2D[1] null ist, kracht es bei array2D[1][j]

bzw schon bei length...

Java:
 int[] array1D = new int[array2D.length * array2D[0].length];
        for(int i = 0, k = 0; i < array2D.length; i++)
            for(int j = 0; j < array2D[0].length; j++, k++)
                array1D[k] = array2D[i][j];
würd ich nicht so machen, du gehst davon aus das alle arrays in dem array gleich lang sind... wenn das nicht der fall ist?
 
Wie würdest dus machen ?

Habs etz so versucht, klappt auch fast :

Java:
public static int[] convertArrayTo1D(int[][] input) {
		int [] x = new int [input.length*input[0].length];
		
		for ( int i=0, k =0; i < input.length; i++ )
			if (input[i]!= null){
			for (int j=0; j < input[i].length; j++, k++)
			
						x[k] = input [i][j];
			}

Er wirft mmir etz zwar kein Fehler mehr aus, aber das :[1, 2, 3, 4, 6, 7, 8, 9, 0, 0, 0, 0]

Des waren die Eingabewerte : [[1, 2, 3, 4], null, [6, 7, 8, 9, 10]]

Wie kommen die letzten 4 Nullen zustande?
 
Wie würdest dus machen ?

Java:
import java.util.Arrays;


public class Test {
	
	public static void main(String[] args) {
	    int[][] values = {{1,2,3,4},null,{6,7,8,9,10}};
	    					//[[1, 2, 3, 4], null, [6, 7, 8, 9, 10]]
	   
	    
	    int[] result = convertArrayTo1D(values);
	    System.out.println(Arrays.toString(result));
	  //[1, 2, 3, 4, 6, 7, 8, 9, 10]
	}

	public static int[] convertArrayTo1D(int[][] input) {
		//zuerst zählen...
		int count = 0; 
		for(int i = 0; i < input.length; i++){
			if(input[i] == null)
				continue;
			count += input[i].length;
		}
		
		//ergebnis aufbauen
		int [] result = new int[count];
		
		//und umkopieren
		int current = 0;
		for(int i = 0; i < input.length; i++){
			if(input[i] == null)
				continue;
			for(int j = 0; j< input[i].length; j++){
				result[current] = input[i][j];
				current++;
			}
		}
		return result;
	}



}
 
Ok, vielen Dank soweit!

Sprich du zählst immer erst die Länge des Arrays, zählt der mit dieser Programmierung alle Dimensionen?

Danach übergibst du den gezählten Wert als neue Länge für einen 1 D- array und lässt die Schleife durchlaufen.

Angenommen ich wollte etz eine 3 D in 1 D array konvertieren, dann zähl ich des erst wieder, und erweitere meine Programmierung um eine weitere for- Schleife die einen weiteren Wert( nur um im Alphabet zubleiben, sagen wir k)! Muss ich vor diesem wieder einen Null-Filter einbauen oder reicht einer?

Ich will wirklich keine fertige Lösung oder so was, ich verstehs nur echt net und mir konnte in diesem Fall auch kein Buch weiterhelfen.
 
Angenommen ich wollte etz eine 3 D in 1 D array konvertieren, dann zähl ich des erst wieder, und erweitere meine Programmierung um eine weitere for- Schleife die einen weiteren Wert( nur um im Alphabet zubleiben, sagen wir k)! Muss ich vor diesem wieder einen Null-Filter einbauen oder reicht einer?
Ja, ein "3D" int Array kann auf der ersten und zweiten Ebene null "enthalten"
Java:
int[][][] array = new int[3][][];
array[0] = null;
array[1] = new int[][] {{1, 2, 3}, null};
array[2] = new int[][] {{1}, {1, 2} , {1, 2, 3}, new int[5]};

Wobei man sich überlegen könnte, ob man ab einen "3D" Array das nicht mittels Rekursion statt zusätzlicher for-Schleifen könnte.
 
Ich hab des etz versucht nach dem Vorbild der 2D in 1D transformation zu machen, allerdings wirft er mir immer nen Fehler aus. Wenn ich die Größe des 1D- Arrays mit Hilfe der Zählprogrammierung bestimm wie im 2D Fall, zählt der da alle Dimensionen oder nur die 1? Hab auch schon versucht die Zahlschleife zu erweitern, aber ohne erfolg!

Lg
 
Hab auch schon versucht die Zahlschleife zu erweitern, aber ohne erfolg!
zeig mal...,

Ich will wirklich keine fertige Lösung oder so was, ich verstehs nur echt net und mir konnte in diesem Fall auch kein Buch weiterhelfen.

überleg dir das mal mit bleistifft und papier... was verstehst du genau nicht?
in einer schachtel sind schachteln drinen, wo wieder schachteln drinnen sind, wo Eier drinnen sind. 3D

jetzt willst du eine schachtel bauen die so viele fächer hat das alle eier platz haben. und du fragst jetzt ob du fächer in den ganz inneren schachteln auch mitzählen musst. ähmn? ja klar!


das mit der null überprüfung.. ich würd generell nie ein programm schreiben, wo in einem mehrdimensionalen array irgendow mal mitendrin ein arry null sein kann... aber wenn die aufgabenstellung so ist... musst natürlich auch überprüfen...
 
Hi,

Java:
int zaehl = 0;
				for (int i = 0; i<input.length; i++){
					if (input [i] == null) continue;
						for(int j= 0;j <input[i].length;j++)
			zaehl +=  (input[i].length + input[j].length);
					}

Hab se auch schon einmal mit ner weiteren for- Schleife erweitert aber ich bekomm immer nen Fehler!

Addier ich unten die Länge richtig?
 
Wie ich soeben in einem anderen Thread beschrieben habe, sind Programmierkenntnisse eine zwingende Voraussetzung um eine Programmiersprache zu lernen.

1. WAS will/muss ich tun
2. WIE will ich das lösen
3. TUN (Erst jetzt kommt eine Programmiersprache zum Zuge) impementieren und testen.

Wir können (ich gebs zu auch wollen) erst im Schritt 3 helfen.

überleg dir mit Papier und Stift wie du das Problem lösen willst ......

mehr steht eben hier
 

Neue Themen


Zurück
Oben