WinFuture-Forum.de: Dringende Java-hilfe Bei Klasse Zur Berechnung Der Pq-formel :( - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Dringende Java-hilfe Bei Klasse Zur Berechnung Der Pq-formel :(


#1 Mitglied ist offline   skynetwork 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 26. Juni 06
  • Reputation: 0

geschrieben 26. Juni 2006 - 21:05

hey leute und erstmal ein hallo in die runde,
bin schon seit längerem am wälzen des forums hier und hab leider das PW meines alten accs vergessen ^^
da es hier superleute gibt, die in vielen fällen vor allem auch n00bs wie mir weiterhelfen musst ich mich gleich ma neu reggen....

ich sitz hier gerade an nem programm zum lösen quadratischer gleichungen der form:

ax² + bx + c = 0

prog funzt soweit auch, aber es berechnet leider falsch wie mir scheint. da ich mathematisch ne ziemliche null bin und mir bisher auch das proggen noch nich ganz so von der hand flutscht (und ich eigentlich schon stolz bin, daß prog soweit schon am laufen zu haben) meine frage an euch, ob ihr evtl. den fehler seht. ich komm einfach nicht dahinter, wo in der berechnungsklasse nun der fehler ist....

bin nen ziemlicher java-n00b muss ich gestehen und wie gesagt mathematisch nicht gerade hochbegabt :(

class MeineBerechnung
{

/**
 * Beginn der Methode für Formelberechnung
 * @param a
 * @param p
 * @param q
 * @param art
 * @return temp2
 */
	public static double PQFormeln(double a, double p, double q, String art)
	{
		double wert1 = a;
		double wert2 = p;
		double wert3 = q;
		double temp1;
		double temp2 = 0;
		String bereich = art;
		if (wert1 != 0) // Das Dividieren durch Null Problem wird ausgeschaltet
		{
			if (wert2 != 0)
			{
				wert2 = wert2 / wert1; // Der Wert wird in die PQ Form umgewandelt
	   
			} 
			if (wert3 !=0)
				wert3 = wert3 / wert1; // Der Wert wird in die PQ Form umgewandelt
		}
		else //Es koennte auch  der Wert2 Null sein.
		{
			if (wert2 != 0) 
				wert2 = wert2 / 2;
	
		}

		temp1 = hochrechnen(wert2,2);
		temp1 = temp1 - wert3;
		temp1 = Math.sqrt(temp1);  // Zieht die Quadratwurzel
  
		if (bereich == "+") // Für den positiven X Bereich
		{
			temp2 = temp1 - wert2;
		}

		if (bereich == "-")
		{
			temp2 = temp1 + wert2;
		}

		if (Double.isNaN(temp2) ) // Hier wird überprüft ob es zu einem NotANumber-Fehler kommt. (Wurzel konnte nicht gezogen werden)
		{
			temp2 = 0; // Eine Null wird als Fehlerabfang gesetzt.
			System.out.println("Keine reele Zahl. Lösung des " + bereich+ " x Bereiches nicht möglich.");
		}

		return temp2; // Ist eine Reele Zahl oder die Null 

	}
	
	public static double hochrechnen( double wert, int stellen)
	{
		double wert2 = wert;
		for (int i = 1; i <= stellen; i++)
		{
			wert2 = wert2 * wert;
		
	}
		return wert2;
	}
}


wie zum henker muss ich das mistvieh umschreiben, damit der PQ-Mist endlich richtich ausgerechnet wird. ich hab seit einigen Tagen nur ? vor den augen :lol:
programm funzt, bis auf die elende berechnung der eigentlichen formel ..... und wenn das nich funzt ist mein kurs soweit erstma verkackt...

hoffe ihr könnt mir in verständlichen worten oder ideen zur codeverbesserung helfen... bin am ende meiner fähigkeiten angelangt :/
eigentlich isses ja keine große klasse, aber ich weiß nicht mehr weiter.

help

Dieser Beitrag wurde von skynetwork bearbeitet: 26. Juni 2006 - 21:08

0

Anzeige



#2 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 26. Juni 2006 - 21:42

Eine Vergewaltigung der Eleganz von Java, vorgefertigter Methoden und Ausnahmebehandlung par excellance unter Abwesenheit ordentlicher Intendation. Das ist kein Java, das ist C mit Java-Skin.

Dabei geht es doch so schön und einfach:
class MeineBerechnung {
	static final double pqFormeln(double a, double p, double q, boolean art) {
		try {
		  p/=a; q/=a;
		} catch (ArithmeticException e) {
			  throw new ArithmeticException("Hä, ich verstehe deine Fehlerbehandlung nicht!");
		}
		p/=-2;
		double r = sqrt(p*p-q);
		if (isNaN(r))
			throw new ArithemticException("Keine reele Zahl. Lösung des "+(art?'+':'-')+" x Bereiches nicht möglich.");
		return art?p+r:p-r;
	}
}

Dieser Beitrag wurde von Rika bearbeitet: 26. Juni 2006 - 21:52

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#3 Mitglied ist offline   skynetwork 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 26. Juni 06
  • Reputation: 0

geschrieben 26. Juni 2006 - 22:46

du bist ja fies ;) aber ich glaub ich weiß was du meinst.
genau das meinte mein dozent auch schon und fragte mich, ob ich mal c++ geproggt hätte, weil das nicht objektorientiert genug war ;)
das ist sozusagen mein 1. javaprogramm, keine vorkenntnisse und lustigerweise erklärt er die sachen, welche wir schon in progs ballern sollen, dann erst ein paar wochen später. für jemanden, der das noch nie gemacht hat isses sauschwer, aber ich bin ja lernwillig und dank hilfe in foren klappt das auch schon etwas besser als noch vor einigen wochen ^^
und an der form arbeite ich noch :8):

okidoki, hab deine klasse jetzt noch um die nötigen methoden erweitert weil ja noch returnanweisungen für isNaN und sqrt da in meiner klasse für die berechnung fehlten (zumindest teilte mir das eclipse mit) ;)

class MeineBerechnung 
{
	static final double pqFormeln(double a, double p, double q, boolean art) 
	{
		try 
		{
		  p/=a; q/=a;
		} catch (ArithmeticException e) 
		{
		  p/=-2;
		}
		double r = sqrt(p*p-q);
		if (isNaN(r))
			throw new ArithmeticException("Keine reele Zahl. Lösung des "+(art?'+':'-')+" x Bereiches nicht möglich.");
		return art?p+r:p-r;
	}
	
	private static boolean isNaN(double r)
	{
		
		return false;
	}

	private static double sqrt(double d) 
	   {
		return 0;
	}


}


hoffe, die erweiterung war korrekt. problem war, daß in der unteren klasse, die methode "berechneWerte" nach dem prinzip "double,double,double,string" gebaut ist und somit nicht direkt auf die eigentliche pqFormel zugreifen kann scheinbar, welche ja "double, double, double, boolean" gestrickt ist.

das hier ist dann meine andere klasse, die halt die u.a. die werte der pqformel abfragt:

class GleichSystem
{
/**
 * beschreibt das Array für alle genutzen Werte
 */
	private double Werte[]= {0,0,0,0,0};

/**
 * legt den Abfrageablauf fest
 *
 */
	public void ablauf()
	{
	eingabenErfassen();
	System.out.println("Sie haben die folgende Gleichung eingeben");
	ausgabeGleichung("0");
	berechneWerte();
	System.out.println("Ihre berechneten moeglichen Werte sind: ");
	ausgabeGleichung(MeineAusgabe.runde(Werte[3])); // Es muss ja gerundet werden.
	ausgabeGleichung(MeineAusgabe.runde(Werte[4]));
	}
/**
 * legt die Berechnung fest
 *
 */
	private void berechneWerte()
	{
		Werte[3] = MeineBerechnung.pqFormeln(Werte[0],Werte[1],Werte[2],"+"); // Hier berechnet er den positiven P/Q-Formel Wert.
		Werte[4] = MeineBerechnung.pqFormeln(Werte[0],Werte[1],Werte[2],"-");
	}
/**
 * dient der Eingabeerfassung
 *
 */
	private void eingabenErfassen()
	{
	MeineEingabe eingeben = new MeineEingabe();
	Werte[0] = eingeben.erfasseDouble("A"); // Hier fragt er die Werte ab.
	Werte[1] = eingeben.erfasseDouble("B");
	Werte[2] = eingeben.erfasseDouble("C");
	}
/**
 * legt die Ausgabegleichung fest
 * @param loesung
 */
	private void ausgabeGleichung(String loesung) 
	{
	System.out.println(Werte[0] +"x² + " +Werte[1]+ "x + " +Werte[2] + " = " + loesung);
	}

}


nicht lachen ;)

nun hab ich halt das problem, daß ich nicht weiß, wie ich zum einen die argumente mit der string-anweisung mit der boolean-anweisung in einklang bringen kann, damit der mist läuft :/
prog bricht logischerweise genau an der stelle ab. wo angefangen wird, auf die "pqFormeln" zuzugreifen.

p.s.: danke schonmal im voraus. glaub durch das hilfesuchen in foren kommt langsam licht in mein javadunkel. ist halt nur sauschwer, wenn plötzlich ne neue sprache auf mangelnde mathematikkentnisse trifft ^^

Dieser Beitrag wurde von skynetwork bearbeitet: 26. Juni 2006 - 22:47

0

#4 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 26. Juni 2006 - 22:57

Zitat

private static boolean isNaN(double r)
private static double sqrt(double d)

Was soll das? Es handelt sich nachwievor um Double.isNaN() und Math.sqrt().
->
import static Double.isNaN;
import static Math.sqrt;

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#5 Mitglied ist offline   skynetwork 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 26. Juni 06
  • Reputation: 0

geschrieben 26. Juni 2006 - 23:19

na isNaN und sqrt brauchen doch ne methode, weil sie ansonsten für meineBerechnung unedfiniert sind, oder?

das mit der importanweisung hab ich nich wirklich verstanden *schäm* ;)
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 26. Juni 2006 - 23:24

In deinem usprünglichen Kot stand Math.sqrt() und ich habe es mit sqrt() abgekürzt, weil man es ja statisch importieren kann. So ist's halt übersichtlicher.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 Mitglied ist offline   skynetwork 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 26. Juni 06
  • Reputation: 0

geschrieben 27. Juni 2006 - 00:04

ah, kk, nur von wo aus sollte das denn importiert werden? ;)
wenn ich diese importanweisung quasi an den anfang der klasse packe bekomm ich ja nen fehler, daß "double" und "Math" cann6t be resolved.
und wie bekomm ichn dann das problem mit dem "double double double string" und "double double double boolean" geregelt (s.o.)?

denn wie gesagt bricht das prog ja nun ab, sobald die pqFormel methode abgefragt wird ;)
das raff ich irgendwie nich so ganz ab :/
glaub ich muss noch einiges lernen, aber ich bin aufm weg :8):

Dieser Beitrag wurde von skynetwork bearbeitet: 27. Juni 2006 - 01:46

0

#8 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 27. Juni 2006 - 11:31

Zitat

ah, kk, nur von wo aus sollte das denn importiert werden?

Aus java.lang, wie zuvor auch? Woher denn sonst?

Zitat

und wie bekomm ichn dann das problem mit dem "double double double string" und "double double double boolean" geregelt (s.o.)?

Indem du den String durch den entsprechenden boolean-Wert ersetzt? Kannst ja statische Konstanten definieren, wenn du's klar ausdrücken möchtest.

Zitat

glaub ich muss noch einiges lernen

Ja, z.B. die Grundlagen von Java und Programmierung überhaupt...
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0