Hi Leute,
ich bin hier neu, und weis nicht,ob die Frage eine 'Anfängerfrage' ist.
Naja aber hier mein Problem:
Ich soll folgendes aus einer Textdatei einlesen können:
double(d) double(d) Rechenzeichen(R) (meiner Meinung nach ein Char)
Das ganze soll beliebig oft gehen (also zb d,d,R,d,d,R,d,d)
aber mit folgenden Randbedingungen:
Wenn nur d,d eingegeben wird, soll ich sie an meine Klasse übergeben.
Wenn R am Ende der Eingabe steht, soll zB ein boolean auf falsch gesetzt werden.
Nun zu meiner Klasse:
Die Klasse ist eine Komplexe Zahl, mit 3 Methoden (addieren, subtrahieren, multiplizieren); die Klasse habe ich fertig, und die funktioniert auch, nur ergibt sich dadurch für oben wieder ein Problem:
Eingabe:
d,d => Ein Objekt erstellen O(d,d)
d1,d1,R,d2,d2 => 2 Objekte O1(d1,d1) O2(d2,d2) mit R 'verknüpfen';
Sollte jetzt noch einmal R,d3,d3 kommen, so muss ich das vorherige Ergebniss mit dem neuen Objekt verknüpfen.
Ich habe schon 3 Ansätzte probiert, leider klappt keiner davon, aber ich poste ihn mal, vielleicht kann mir jemand sagen wo mein Fehler liegt, bzw kann mir sagen, wie ich diesen Code vereinfachen kann:
Lösungsversuch 1:
Lösungsversuch 2:
Leider endet es in einer Endlosschleife, bzw wird gar nicht ausgeführt....
AN und für sich würde es mir völlig reichen, wenn mir jemand sagen könnte wie ich diese Abfrage abwechselnd machen kann, bzw wie ich einfacher diese ganzen Sonderfälle abfange.....
Hoffe, dass mir jemand helfen kann...
mfg blawa
ich bin hier neu, und weis nicht,ob die Frage eine 'Anfängerfrage' ist.
Naja aber hier mein Problem:
Ich soll folgendes aus einer Textdatei einlesen können:
double(d) double(d) Rechenzeichen(R) (meiner Meinung nach ein Char)
Das ganze soll beliebig oft gehen (also zb d,d,R,d,d,R,d,d)
aber mit folgenden Randbedingungen:
Wenn nur d,d eingegeben wird, soll ich sie an meine Klasse übergeben.
Wenn R am Ende der Eingabe steht, soll zB ein boolean auf falsch gesetzt werden.
Nun zu meiner Klasse:
Die Klasse ist eine Komplexe Zahl, mit 3 Methoden (addieren, subtrahieren, multiplizieren); die Klasse habe ich fertig, und die funktioniert auch, nur ergibt sich dadurch für oben wieder ein Problem:
Eingabe:
d,d => Ein Objekt erstellen O(d,d)
d1,d1,R,d2,d2 => 2 Objekte O1(d1,d1) O2(d2,d2) mit R 'verknüpfen';
Sollte jetzt noch einmal R,d3,d3 kommen, so muss ich das vorherige Ergebniss mit dem neuen Objekt verknüpfen.
Ich habe schon 3 Ansätzte probiert, leider klappt keiner davon, aber ich poste ihn mal, vielleicht kann mir jemand sagen wo mein Fehler liegt, bzw kann mir sagen, wie ich diesen Code vereinfachen kann:
Lösungsversuch 1:
Code:
// --------- Variablen ---------
Scanner scan = new Scanner(System.in);
Complex a = new Complex (0,0);
Complex Ergebniss = new Complex (0,0);
boolean falsch = false;
double Real1=0;
double Imag1=0;
int WelcherTeil=0;
int Anzahl=0;
char Operator = 'a';
// --------- Einlesevorgang ---------
while (true) {
if (scan.hasNextDouble()) {
Real1=scan.nextDouble();
WelcherTeil++;
if (scan.hasNextDouble()) {
Imag1=scan.nextDouble();
WelcherTeil++;
Anzahl++;
} else {
falsch = true;
break;
}
} else {
if (WelcherTeil ==3 && scan.hasNext()) {
Operator = scan.next().charAt(0);
WelcherTeil = 1;
switch (Operator) {
case '+': break;
case '-': break;
case '*': break;
default: falsch = true; break;
}
if ((scan.hasNextDouble() == false) || (falsch==true)) {
falsch= true;
break;
}
}
if (WelcherTeil ==3 && scan.hasNext() == false && Anzahl ==1) {
Ergebniss = new Complex(Real1, Imag1);
}
if (WelcherTeil != 3 && WelcherTeil != 1) {
falsch = true;
break;
}
}
if (Anzahl == 1) {
Ergebniss = new Complex(Real1, Imag1);
}
if (Anzahl >= 2) {
a = new Complex(Real1, Imag1);
switch (Operator) {
case '+': Ergebniss = Ergebniss.add(a); break;
case '-': Ergebniss = Ergebniss.sub(a); break;
case '*': Ergebniss = Ergebniss.mul(a); break;
default: falsch = true;break;
}
}
if (scan.hasNext() == false) break;
}
if ( falsch == false) {
Ergebniss.print();
}
else {
System.out.println("FALSCHE EINGABE");
}
Lösungsversuch 2:
Code:
// --------- Variablen ---------
Scanner scan = new Scanner(System.in);
Complex a = new Complex (0,0);
Complex Ergebniss = new Complex (0,0);
boolean falsch = false;
double Real1=0;
double Imag1=0;
int WelcherTeil=1;
int Anzahl=0;
char Operator;
// --------- Einlesevorgang ---------
while (true) {
System.out.print("while zündet");
if(scan.hasNextDouble()) {
switch (WelcherTeil) {
case '1': Real1 = scan.nextDouble(); WelcherTeil++; System.out.print(Real1); break;
case '2': Imag1 = scan.nextDouble(); WelcherTeil++; Anzahl++; System.out.print(Imag1); break;
default: falsch = true; break;
}
}
if ( (Anzahl>=2) && (WelcherTeil == 3) ) {
a = new Complex(Real1, Imag1);
}
if (Anzahl ==1) {
Ergebniss = new Complex(Real1, Imag1);
}
if ( (WelcherTeil==3) && (scan.hasNext()) ) {
Operator = scan.next().charAt(0);
WelcherTeil=1;
if (Anzahl>=2) {
switch(Operator) {
case '+': Ergebniss = Ergebniss.add(a);break;
case '-': Ergebniss = Ergebniss.sub(a);break;
case '*': Ergebniss = Ergebniss.mul(a);break;
default: falsch = true;break;
}
}
}
if (falsch == true || scan.hasNext() != true) break;
}
if ( falsch == false) {
Ergebniss.print();
}
else {
System.out.println("FALSCHE EINGABE");
}
Leider endet es in einer Endlosschleife, bzw wird gar nicht ausgeführt....
AN und für sich würde es mir völlig reichen, wenn mir jemand sagen könnte wie ich diese Abfrage abwechselnd machen kann, bzw wie ich einfacher diese ganzen Sonderfälle abfange.....
Hoffe, dass mir jemand helfen kann...
mfg blawa