Hallo liebe Community,
nach langer Zeit komme ich mal wieder mit einer Frage an euch heran.
Für die Schule musste ich ein Programm schreiben, welches wahlweise iterativ oder Rekursiv die Wurzel einer Zahl nach dem Heronverfahren berechnet. Die Basis sowie die Anzahl der Schritte sind frei wählbar.
Das funktioniert auch gut. Ich bin aber mit meinem Code noch nicht so ganz zufrieden und möchte euch mal fragen, ob ich an meinem Code noch etwas verändern sollte oder ob der so geht:
nach langer Zeit komme ich mal wieder mit einer Frage an euch heran.
Für die Schule musste ich ein Programm schreiben, welches wahlweise iterativ oder Rekursiv die Wurzel einer Zahl nach dem Heronverfahren berechnet. Die Basis sowie die Anzahl der Schritte sind frei wählbar.
Das funktioniert auch gut. Ich bin aber mit meinem Code noch nicht so ganz zufrieden und möchte euch mal fragen, ob ich an meinem Code noch etwas verändern sollte oder ob der so geht:
Java:
public class Heron{
Hauptframe hf=null;
String dieWuzeletc=null;//Dies ist ein Teil des Textes, der auf einem Label stehen soll, auf den auch die Wurzel kommt
public void machLogik(final boolean rek, final double basis, final double schritte){//Diese Methode wird mit den entsprechenden Parametern aus der GUI-Klasse aufgerufen
class RechenThread extends Thread implements Runnable{//Der Thread, weil bei höheren Schrittzahlen das Programm die GUI blockiert, ich diese Schrittzahlen aber dennoch zulassen möchte
double ergebnis=0;
public void run(){
if (rek){
ergebnis=rekHeron(basis,schritte,quadratzahlen(basis));
} else {
ergebnis=itHeron(basis,schritte,quadratzahlen(basis));
}
hf.lblDieWurzelIst.setText(dieWuzeletc+ergebnis);
}
}
RechenThread rechne=null;
rechne = new RechenThread();
rechne.start();
}
private double itHeron(double basis,double schritte, int kleinereQuadratzahl){
double zwischenergebnis=kleinereQuadratzahl;
for (int i=0;i<schritte;i++){
zwischenergebnis=(zwischenergebnis+(basis/zwischenergebnis))/2;
}
return zwischenergebnis;
}
private double rekHeron(double basis, double schritte, double zwischenergebnis){
try{//Die Try-catch Umgebung, da ich einen StackOverFlowError bei zu hohen Schrittzahlen bekomme. Da ich davon ausgehe, dass diese Exception Computerspezifisch ausgelöst wird, wollte ich keine Schrittzahl vorgeben
if (schritte>0){
zwischenergebnis=(zwischenergebnis+(basis/zwischenergebnis))/2;
schritte--;
return rekHeron(basis,schritte,zwischenergebnis);
}
return zwischenergebnis;
} catch (java.lang.StackOverflowError e){
return zwischenergebnis;
}
}
private int quadratzahlen(double basis){
int quadratzahl=0;
int zähler=1;
while (quadratzahl<basis){
quadratzahl=zähler*zähler;
zähler++;
}
return quadratzahl;
}
public Heron(Hauptframe hf, String dieWuzeletc){
this.hf=hf;
this.dieWuzeletc=dieWuzeletc;
}
}