Anfängerproblem

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hey ihr,

also ich möche gleich vorn weg sagen, dass ich ein ziemlicher Neuanfänger in Java bin. Also habt bitte Nachsicht mit mir:) Ich soll ein Programm schreiben, in dem man eine quadratische Gleichung ausrechnen kann. Das heißt die Aufgabe lautet ganz normal ax²+bx+c=0. Ich muss es realisieren, dass die Aufgabe am Anfang angezeigt wird, so dass der Benutzer weiß worum es sich handelt. Danach sollen die eingegeben Variabeln, also die Gleichung, ausgerechnet werden. Dabei soll beachtet werden, dass falls die Gleichung eine reelle Lösung hat, sie mit einer Genauigkeit von 8 Stellen hinter dem Komma ausgegeben wird. Falls keine reelle Lösungen vorhanden sind, soll ein Hinweis erscheinen.

Okay, aber gleich vor weg. Ich möchte nicht, dass das hier rüberkommt, als würde ich nun auf eine Lösung warten. Ich würde das gerne verstehen und lernen. Mein Problem ist leider nur, das ich mit den verschiedenen programmierstilen noch nicht klar komme. Wir sollen nicht prozedural programmieren, sondern eben objektorientiert. Also nicht alles in eine Main-Klasse schreiben.

Ich habe mir das so vorgestellt:
Code:
public class GleichungRechner
{
  //Meine Attribute
  private double a = 0;
  private double b = 0;
  private double c = 0;
  private double x = 0;
  

  //Mein Konstruktor
  public GleichungRechner() throws IOException
  {
    erfasseA();
    erfasseB();
    erfasseC();
    berechneX();
  }
  
  //Hier folgen die Methoden
  private void erfasseA() throws IOException
  {  
   MeineAusgabe.schreibe("Geben Sie bitte die Variable a ein: /n");
    a = MeineEingabe.erfasseDouble();
  }

  private void erfasseB() throws IOException
  {
    MeineAusgabe.schreibe("Geben Sie bitte die Variable b ein: /n");
    b = MeineEingabe.erfasseDouble();
  }

  private void erfasseC() throws IOException
  {
    MeineAusgabe.schreibe("Geben Sie bitte die Variable c ein: /n");
    c = MeineEingabe.erfasseDouble();
  }

  //Hier würde ich mit der Rechung beginnen...weiß nur nicht wie ich sie realisieren muss bezüglich des Quadrates und    der Wurzelrechnung. Also eine Funktion BerechneX() habe ich mir gedacht?

}


Für MeineAusgabe habe ich eine extra Klasse in der nur System.out.Println() steht. Wir können das direkt schreiben, aber haben angefangen es erst einmal in einer solchen Klasse zu lassen.

Außerdem gibt es eine Klasse MeineEingabe die ich von meiner letzten Aufgabe habe. Dort kann ich alles nachvollziehen..bis auf den letzten Teil (vielleicht könntet ihr mir sagen wieso der so geschrieben ist, die Kommentare sind von mir...und an ihnen wurde nicht gemeckert bei der letzten Aufgabe) [das DecimalFormat habe ich selbst auf 8 Stellen hinter dem Komma gesetzt. Ist das so richtig?]

MeineEingabe:

Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.text.DecimalFormat;

/**Ermoeglicht die Eingabe von Text oder Ziffern ueber die Tastatur.
 */
public class MeineEingabe
{
  /**Erfasst die Eingabe eines Textes mit Hilfe der Tastatur.
   */
  private static BufferedReader eingabe =
  new BufferedReader(new InputStreamReader(System.in));
  
  /**Erfasst den ueber die Tastatur eingegebenen Text.
   * @return Erfasst den ueber die Tastatur eingegebenen Text.
   */
  public static String erfasseText() throws IOException
  {
    return eingabe.readLine();
  }
  
  /**Erfasst die ueber die Tastatur eingegebene Zahl.
   * @return Erfasst die ueber die Tastatur eingegebene Zahl.
   */
  
  public static int erfasseInt() throws IOException
  {
    return Integer.parseInt(erfasseText());
  }
  
  /**Erfasst die ueber die Tastatur eingegebene Zahl.
   * @return Erfasst die ueber die Tastatur eingegebene Zahl.
   */
  
  public static double erfasseDouble() throws IOException
  {
    return Double.parseDouble(erfasseText());
  }
  
  
  /**Wandelt die Zahl in eine neue Gleitkommazahl um und rundet diese.
   * @param zahl Ist die Zahl die gerundet werden soll.
   * @param stellen Ist die Anzahl der Stellen hinter dem Komma.
   * @return liefert die Gleitkommazahl.
   */
  public static String runde(double zahl, int stellen) throws IOException
  {
    String dformat = "0.";
    for (int i = 0; i < stellen; i++)
      dformat += "0.00000000";
    DecimalFormat deciformat = new DecimalFormat(dformat);
    return deciformat.format(zahl);
  }
}


Dann gibt es noch eine MainKlasse die bei mir GleichungsRechnerMain heißt:

Code:
import java.io.IOException;

public class GleichungRechnerMain
{
  /**Startet den TemperaturUmrechner
   */
  public static void main(String[] args) throws IOException
  {
    GleichungRechner rechner = new GleichungRechner();
  }
}

Ich hoffe der Code ist sichtbar :( Ich würde mich sehr über etwas Unterstützung freuen. Mit einer anderen Programmierschreibweise tu ich mich noch sehr schwer und ich hoffe, dass das nun nicht zu viel war. Falls mir jemand helfen möchte, würde ich mich sehr freuen. Ich mag das alles lernen :###

Viele Grüße und danke sehr![/code]
 

Berserk

Mitglied
Hey ihr,

ich habe nun etwas umgeschrieben. Ich glaube mein Konstruktor war mehr als schlecht, daher habe ich versucht, dass alle Variablen auf einmal erfasst werden. Außerdem habe ich "berechneX" gelöscht und ein "berechneGleichung" dazugefügt.

Mein Code sieht nun wie folgt aus:



Code:
import java.io.IOException;

public class GleichungRechner
{
  private int a = 0;
  private int b = 0;
  private int c = 0;
  
  public GleichungRechner() throws IOException
  {
    gebeFormelAus();
	erfasseABC();
    berechneGleichung();
  }
  
  private void gebeFormelAus() throws IOException
  {
	MeineAusgabe.schreibe("Nach dieser Formel wird berechnet:" + " " + "ax² + bx +c = 0\n");
  }
  
  private void erfasseABC() throws IOException
  {  
   MeineAusgabe.schreibe("\nGeben Sie bitte die Variable a ein:");
    a = MeineEingabe.erfasseInt();
   MeineAusgabe.schreibe("Geben Sie bitte die Variable b ein:");
    b = MeineEingabe.erfasseInt();
   MeineAusgabe.schreibe("Geben Sie bitte die Variable c ein:");
    c = MeineEingabe.erfasseInt();
  }

  private void berechneGleichung() throws IOException
  {
   String gleichung = a + "x² + " + b +"x + "+c +" = 0\n";

Ich weiß, dass es mehrere Beispiele im Netz für solch eine Aufgabe gibt. Ich habe auch hier das Forum durchsucht, nur komme ich, wie schon gesagt, mit dem Stil nicht klar. Ich habe auch noch keine Schleifen benutzt, denke aber das ich das tun muss, da ich ja relee Lösungen vorzeigen muss und falls keine da sind eine Nachricht ausgeben muss, dass eben keine vorhanden sind.

Nur..hm so viel Erfahrung habe ich eben nicht.

Nun ja, ich hoffe auf ein wenig Hilfe.

Danke schön
 

Berserk

Mitglied
hmm..

Code:
MeineAusgabe.schreibe("x1 = "  + ((-b+Math.sqrt(d))/(2*a)) + ", x2 = " + ((-b-Math.sqrt(d))/(2*a)));

Ich habe nun diese Rechung und soll das Ergebnis auf 8 Nachkommastellen rechnen. Ich weiß im prinzip wie ich 2 realisiere. Aber die Math.Klasse hilft mir hier nicht weiter. Ich schaff es nicht das Ergebnis zu runden.

Kann mir denn hier vielleicht jemand helfen?

Danke sehr :###
 
G

Gast

Gast
ich habe auch keinen schnellen überblick, aber das Endergebnis in einem schritt als anfänger zu rechnen ist doch recht kühn.

ich würde dir raten, in der doc nachzusehen, mit welcher genauigkeit die sqrt und die anderen java.math arbeiten und welche ausgabe sie jeweils haben.

dann zum debugging zwischenergebnisse bilden, diese ausgeben und dann langsam zum problem vorhangeln.

das ist zwar arbeit, man lernt aber viel merh - auch wenn es zeit kostet.

viel glück
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben