Hi,
ich bin neu bei java. Programmiererfahrung habe ich bisher nur von PHP und das ist bekanntlich weniger streng ^^.
Ich habe ein recht banals problem wie ich finde.
Ich arbeite mit mehrdimensionalen integer Arrays (int[][]) die durch eine funktion auf basis von schleifen und bedingungen gefüllt werden.
Mein Problem ist, um einem Array einen Wert zuzuweisen brauche ich einen index, da ich die Arrays nun aber nach und nach fülle müsste ich mir dann immer den aktuell höchsten index speichern um zu wissen, welches das näcshte freie Feld ist.
Gibt es irgendeine funktion wie ich den nächsten noch nicht belegten index eines Arrays bekomme? oder irgendein tipp wie ich mir selbst eine schreiben kann?
Als bspw:
Code:
int erg;
int[] var = new int[4];
var[0] = 'foo';
var[1] = 'bar;
erg = funktionDieIchBrauche(var);
//erg hat jetzt den wert 2
Das ich das Problem überhaupt hab ist warscheinlich php schädigung, wo man arrays einfach mit $array[] = $value füllen kann also ohne index angabe.
Mein Problem ist, um einem Array einen Wert zuzuweisen brauche ich einen index, da ich die Arrays nun aber nach und nach fülle müsste ich mir dann immer den aktuell höchsten index speichern um zu wissen, welches das näcshte freie Feld ist.
Gibt es irgendeine funktion wie ich den nächsten noch nicht belegten index eines Arrays bekomme? oder irgendein tipp wie ich mir selbst eine schreiben kann?
Im idealfalle hast du for-schleifen, die dir deinen Index generieren. Ist das Array 2d dann hast du halt ne for-schleife in einer for-schleife drin. Dann hast du z.B.
Java:
int[][] abc =newint[10][10];for(int i =0; i <10; i++)for(int j =0; j <10; j++)
abc[i][j]= i*j;
Das ich das Problem überhaupt hab ist warscheinlich php schädigung, wo man arrays einfach mit $array[] = $value füllen kann also ohne index angabe.
Nun ja, als ich mit Java angefangen hatte, habe ich schnell gemerkt: Arrays sind hier nicht so flexibel und wie in PHP. Deswegen tendiere ich eher zu Vectoren oder HashMaps.
Java:
Vector<Integer> v =newVector<Integer>();
v.add(2);HashMap<Integer,Integer> hm =newHashMap<Integer,Integer>();
hm.put(hm.size(),2);
Also erstmal würde
var[0] = 'foo';
so nicht gehen (jaja, in PHP schon *g*)
Da du ein int Array hast, musst du da auch int`s ablegen!
Aber wegen deiner eigentlichen Frage:
Du kannst dir ja einfach immer den aktuellen index merken und dann einfach auf index++ zugreifen(besser wäre noch zu überprüfen ob dieser nicht übers Ende hinausläuft )
Java:
int erg=0;//vllt als klassenvariable oder so :Dint[]var=newint[4];var[erg++]=5;//index 0var[erg++]=55;// injdex 1
arrays muss ich leider verwenden, ist vorgegeben.
Also komm ich nicht drumherum mir zig variablen anzulegen in denen ich den aktuellen index speichere?
weil im falle von int[9][9] z.B. wären das ja bereits 10 variablen... ( das problem ist die Arrays werden nicht nacheinander komplett gefüllt, sondern mal kommt ein bischen was ins eine mal ins andere)
Also ich habe ein 9x9 Feld: int[9][9] das für ein Sudoku steht (komplett belegt, "leere" Felder = 0).
Ich muss überprüfen ob es ein gültiges Sudoku ist, also ob die selbe Zahl nicht doppelt in jeder reihe, spalte oder 3x3 kästchen vorkommt.
Meien Lösung:
1. Reihen habe ich: einfach jedes der 9 Arrays im 9x9 array -> nach duplikaten durchsuchen
2. Spalten Array erstellen aus dem Reihen Array -> nach duplikaten durchsuchen
3. Rechteck - Array erstellen -> nach duplikaten durchsuchen
um die Arrays zu erstellen durchlauf ich das Sudoku Array
Java:
int colCount =0;int rowCount =0;int rectCount =0;int rectCurCount =0;int[][] columns =newint[9][9];int[][] rects =newint[9][9];// Check rows for duplicates and generate column and rectangle Arrays
rowCount =0;for(int[] row : configuration){if(containsDuplicate(row))returnfalse;
colCount =0;
rectCount =0;
rectCurCount =0;for(int number : row){// generate column Array
columns[colCount][rowCount]= number;
colCount++;// generate rectangle Array
rects[rectCount][rectCurCount]= number;
rectCurCount++;if((rowCount %3)==0){
rectCount++;if(colCount ==9)
rectCurCount =3*rowCount;else
rectCurCount =0;}}
rowCount++;}// Check columns for duplicatesfor(int[] col : columns){if(containsDuplicate(col))returnfalse;}// Check rectangles for duplicatesfor(int[] rect : rects){if(containsDuplicate(rect))returnfalse;}returntrue;
Wie man sieht artet das in ner menge Zähl variablen aus, wobei , ja ich kann das verringern in dem ich normale for-schleifen verwende, das ist im moment nur so weil ichs vorher anders hatte. Ich weiß jetzt auch nicht ob das schon funktioniert, aber das was ich vorhab kann man denke ich erahnen. Mir ging es einfach nur darum das ganze etwas zu vereinfachen, damit ich nicht tausend zählvariablen brauch. Aber vllcht. hat ja jemand von euch sowieso ne bessere idee ^^