Hallo,
ich habe ein Array int[] a sowie eine "Matrix" int[][] matrix, welche als Array von Array zu verstehen sei.
Nun will ich jede "Zeile" dieser Matrix nehmen und gucken ob ich da das a einfügen kann. falls es geht, füge es ein.
habe ich natürlich shcon a in eine zeile eingefügt, brauche ich die nachfolgenden zeilen gar nicht mehr zu betrachten und kann direkt abbrechen.
Programmiertechnisch sieht das bei mir so aus:
einfuegbar(int[]a,int[]b) ist einfach eine methode die zurückgibt als bool wert ob das array a in das array b "eingefügt" werden kann.
einfuegen(a,b) wiederum ist eine methode mit rückgabewert void, die selbiges einfügen durchführt.
wie man die ei fügbarkeit prüft und wie man es einfügt, hat mit den randbedingungen meines programm s zu tun und das zu programmieren ist kein problem.
nur nervt mich in meinem obigen programm der part
weil hier wird erst geprüft ob es einfügbar ist.
dann wird die einfügbarkeit durchgeführt.
und dann wird zurückgegeben dass, falls dem so ist, erfolgreich eingefügt wurde und damit insbesodnere die umgebende methode abrupt abgebrochen wird.
irgendwie stört mich diese zu kleinliche zerlegung in einzelaufgaben und ich hätte gerne eine einzige methode gebastelt, die in sich prüft ob einfügbar, falls zutreffend die einfügung macht und den "erfolg" oder nicht erfolg der einfügung als rückgabe wert zurückgibt.
also eine methode wie etwa
Frage ich nur, kann ich das irgendwie mit meinem ursprünglichen code (siehe erster code block) benutzen und wenn ja, wie?
ich hätte eigentlich an sowas wie "return einfügen(array,zeile)" gedacht.
Nur befürchte ich dabei, dass wenn in einem der Durchgänge die einfügen Methode aufgerufen wird und false als rückgabe wert liefert, dass dann trotzdem die gesamtmethode dort abgebrochen wird wegen des "return false".
obwohl ich ja will dass die ursprungsmethode nur dann abgebrochen wird wenn in einem der durchläufe ein erfolgreicher einfügevorgang durchgeführt wird.
also nur im fall wo wir true als rückgabe wert haben, abgebrochen wird.
oder sollte ich da als "abbruchbedingung" vielleicht sowas schreiben wie
oder wie würde ich das da richtig benutzen?
sodass nur bei aufrufen der einfügenmethode mit rückgabewert true alles abgebrochen wirde?
ich habe ein Array int[] a sowie eine "Matrix" int[][] matrix, welche als Array von Array zu verstehen sei.
Nun will ich jede "Zeile" dieser Matrix nehmen und gucken ob ich da das a einfügen kann. falls es geht, füge es ein.
habe ich natürlich shcon a in eine zeile eingefügt, brauche ich die nachfolgenden zeilen gar nicht mehr zu betrachten und kann direkt abbrechen.
Programmiertechnisch sieht das bei mir so aus:
Java:
public void einfuegen(int[] array; int[][] matrix) {
for (int[] zelle : matrix) {
if (einfuegbar(array, zelle)) {
einfuegen(array, zelle);
return;
}
}
}
einfuegbar(int[]a,int[]b) ist einfach eine methode die zurückgibt als bool wert ob das array a in das array b "eingefügt" werden kann.
einfuegen(a,b) wiederum ist eine methode mit rückgabewert void, die selbiges einfügen durchführt.
wie man die ei fügbarkeit prüft und wie man es einfügt, hat mit den randbedingungen meines programm s zu tun und das zu programmieren ist kein problem.
nur nervt mich in meinem obigen programm der part
Java:
if (einfuegbar(array, zelle)) {
einfuegen(array, zelle);
return true;
}
weil hier wird erst geprüft ob es einfügbar ist.
dann wird die einfügbarkeit durchgeführt.
und dann wird zurückgegeben dass, falls dem so ist, erfolgreich eingefügt wurde und damit insbesodnere die umgebende methode abrupt abgebrochen wird.
irgendwie stört mich diese zu kleinliche zerlegung in einzelaufgaben und ich hätte gerne eine einzige methode gebastelt, die in sich prüft ob einfügbar, falls zutreffend die einfügung macht und den "erfolg" oder nicht erfolg der einfügung als rückgabe wert zurückgibt.
also eine methode wie etwa
Code:
public bool einfügen (int[] a, int[] b){
bool p=#einfügbarkeitskriterium;
if (p){
//einfügungskram
return true;
}
return false;
}
Frage ich nur, kann ich das irgendwie mit meinem ursprünglichen code (siehe erster code block) benutzen und wenn ja, wie?
ich hätte eigentlich an sowas wie "return einfügen(array,zeile)" gedacht.
Nur befürchte ich dabei, dass wenn in einem der Durchgänge die einfügen Methode aufgerufen wird und false als rückgabe wert liefert, dass dann trotzdem die gesamtmethode dort abgebrochen wird wegen des "return false".
obwohl ich ja will dass die ursprungsmethode nur dann abgebrochen wird wenn in einem der durchläufe ein erfolgreicher einfügevorgang durchgeführt wird.
also nur im fall wo wir true als rückgabe wert haben, abgebrochen wird.
oder sollte ich da als "abbruchbedingung" vielleicht sowas schreiben wie
Code:
if (einfügen(array1,array2)){
return;
}
oder wie würde ich das da richtig benutzen?
sodass nur bei aufrufen der einfügenmethode mit rückgabewert true alles abgebrochen wirde?