Hi, ich bin grad an einer Übung aus "Java für Studenten" vom Pearson-Verlag und komme nicht weiter. hier der Code:
Code:
public class QuadratWurzel
{
private int x;
private double y,z,a;
public QuadratWurzel(int x)
{
this.x=x;
}
public double normaleWurzel()
{
z = Math.sqrt(x);
return z;
}
public double iterierteWurzel()
{
y=x/2;
for(int i = 0; i<444; i++)
{
z=(y+(x/y)/2);
}
return z;
}
}
und
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
/**
* @author kzette
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class QuadratWurzelGUI extends Applet implements ActionListener
{
private Label eingabeLabel;
private Label ausgabeIterativLabel;
private Label ausgabeBiboLabel;
private TextField eingabe, ausgabeIterativ, ausgabeBibo;
private int zahl;
private QuadratWurzel meineQuadratWurzel;
public void init()
{
eingabeLabel = new Label("Zahl:");
add(eingabeLabel);
eingabe = new TextField(8);
add(eingabe);
eingabe.addActionListener(this);
ausgabeIterativLabel = new Label("Ausg.Iterat.");
add(ausgabeIterativLabel);
ausgabeIterativ = new TextField(8);
add(ausgabeIterativ);
ausgabeIterativ.addActionListener(this);
ausgabeBiboLabel = new Label("AusgabeBibo");
add(ausgabeBiboLabel);
ausgabeBibo = new TextField(8);
add(ausgabeBibo);
ausgabeBibo.addActionListener(this);
meineQuadratWurzel = new QuadratWurzel(zahl);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == eingabe)
{
ausgabeBibo.setText(""+ meineQuadratWurzel.normaleWurzel());
ausgabeIterativ.setText(""+meineQuadratWurzel.iterierteWurzel());
}
}
public void paint(Graphics g)
{
g.drawString("Math.sqrt:"+ meineQuadratWurzel.normaleWurzel(), 90, 90);
}
}
Komischerweise kommt bei einem Aufruf bei der normalen Wurzel 0.0 und bei der iteriert-errechneten Wurzel NotANumber raus. Mach ich was falsch mit den Methodenaufrufen?? Syntaktisch korrekt ist das Proggy anscheinend ja.
du übergibst zwar deiner Klasse QudratWurzel beim erzeugen den int zahl, dieser enthält aber zu diesem Zeitpunkt keinen Wert bzw. ist gleich null. Damit sich was tut musst du den Wert der in eingabe steht entweder an die Methoden in meineQudratWurzel mitgeben oder du schreibst dir eine setter methode für diese zahl
ausserdem stimmt die berechnung der iterierten Wurzel nicht, du iterierst nicht sondern machst immter das selbe. Die Wurzel lässt sich ja als Reihenentwicklung darstellen und das tust du nicht, sondern machst bei jedem Durchgang der Schleife das selbe. Ausserdem würde ich nicht mit einer for schleife mit voreingestelltem werde arbeiten. Ich würde ne while Schleife wählen und ein geeignetes Abbruckkriterium angeben. z.B das der Wert vom n-1 Glied zum n Glied einen bestimmten wert unterschreitet