public static int[] convertArrayTo1D(int[][] input)
/********************\
* 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]
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];
}
}
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.
könnte man das ganze nicht mit na while-schleife machen? nur wüsst ich jez auf die schnelle nicht wie
int i=0;
while (i<input.length) {
//machwas
i++;
}
Du musst ein Prüfung auf null einbauen.aber wie kann das Programm zum laufen bringen
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...Jetz kann ich mich in die anderen aufgaben viel besser rein und kann jetzt mal versuchen das ganze richtig zu verstehen =)
Du musst ein Prüfung auf null einbauen.
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];
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];
}
Wie würdest dus machen ?
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;
}
}
Ja, ein "3D" int Array kann auf der ersten und zweiten Ebene null "enthalten"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?
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]};
zeig mal...,Hab auch schon versucht die Zahlschleife zu erweitern, aber ohne erfolg!
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.
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);
}
Nein. Und mit einen Array wie von mir gepostet würde auch eine NPE fliegen.Addier ich unten die Länge richtig?
warum postest du den fehler nicht? :autsch:aber ich bekomm immer nen Fehler