Forum: PC-Programmierung Java Anfängerfrage - Programm läuft nicht


von Schnee +. (mustermann)


Angehängte Dateien:

Lesenswert?

Hallo!

mein programm läuft nicht, zuerst hat alles geklappt, dann habe ich in 
der class etwas verändert und (bin mir nicht mehr sicher vll auch im 
main) dann bekam ich 3 fehlermeldungen (main Calculator im Anhang)

Calculator.java:17: cannot find symbol
symbol  : method out()
location: class Complex
                        a.out();
                         ^
die selbe meldung für die zeile 46 und 83

würde mich über konstruktive kritik freuen (anfänger), vll komm ich auch 
selbst drauf, ist schon spät
hab nur etwas bammel, weil ich das programm heute noch abgeben muss

lg

von Johannes S. (johanness)


Lesenswert?

Offenbar kennt deine Klasse "Complex" keine Methode out(). Das letzte 
mal, als du hier Quellcode veröffentlicht hast hieß die noch print(), 
hast du die auch überall umbenannt?

Falls dus nicht hinbekommst - gib noch die Klasse Complex her, dann kann 
mans wenigstens verstehen.

von Johannes S. (johanness)


Lesenswert?

Ach ja, und kann deine Klasse Complex gar nicht dividieren?

Ich erinnere mal an die schöne Erweiterung
Es ist also eine komplexe Multiplikation und eine Division durch einen 
reellen Term. Das bekommt man hin.

Muss man natürlich aufpassen, dass man nicht durch Null teilt, aber 
ansonsten mag ich Divisionen :D

von Schnee +. (mustermann)


Angehängte Dateien:

Lesenswert?

nöö, muss nur addieren, subtrahieren und multiplizieren können

ich glaub du hast meinen fehler entdeckt, muss ich gleich probieren

von Schnee +. (mustermann)


Lesenswert?

war doch nicht, das was ich geglaubt habe, aber ich denke es hat mit 
print() zu tun, komm nur noch nicht dahinter

von Johannes S. (johanness)


Lesenswert?

Also bei mir lässt es sich compilieren, nur durch den Code der 
Calculator.java steig ich einfach nicht richtig durch. Dieses Gewirr von 
else ifs... (vielleicht würden ein paar Klammern an den richtigen 
Stellen helfen?)

So langsam steige ich durch, was da passiert, nur leider nicht, was 
passieren soll. Dein a wird am Anfang als Complex(0,0) (am Anfang sind r 
und i beide Null) eingerichtet und nur im Falle, dass kein 
Rechenoperator kommt durch die Eingabe ersetzt. Da ist doch was faul. 
Das mit dem Operator verstehe ich dann allerdings nicht mehr, stehe mit 
der Scanner-Klasse ein wenig auf Kriegsfuß.

von Johannes S. (johanness)


Lesenswert?

Lies dir auf jeden Fall noch einmal 
http://java.sun.com/javase/6/docs/api/java/util/Scanner.html durch und 
überlege dann, was du falsch gemacht hast!

von Johannes S. (johanness)


Lesenswert?

Ich hab mal in meine alten Programm geguckt und deinen Quelltext ein 
wenig in diese Richtung modifiziert. Mit den Zeilen
1
        Scanner in;
2
  try {
3
      in = new Scanner((new java.io.BufferedReader(new java.io.InputStreamReader
4
5
(System.in))).readLine());
6
  } catch (java.io.IOException e) {
7
      System.out.println("FALSCHE EINGABE");
8
      return;
9
  }

bekommst du einen Scanner, der die erste Zeile, die auf der 
Standardeingabe eingegeben wird, parst. Ich denke das ist was du willst, 
wenn nicht bitte melden. Bitte so nicht in größeren Programmen 
verwenden, da die Reader nicht geschlossen werden. Macht aber in dem 
Fall nix, weil beim Programmende eh alle Ressourcen freigegeben werden, 
und das Programmende ist ja nicht so weit weg.

Wie bereits gesagt sollte das a=new Complex(r,i) hinter das Einlesen 
von r und i, sonst ist es sinnlos. Die Abfrage vor der While-Schleife, 
ob das nächste Dingens ein Double ist, kann weg. Die Zeile op=... nimmst 
du gefälligst in die While-Schleife rein, deren Bedingung nicht 
hasNextDouble sondern hasNext lauten sollte. So, ich hoffe das reicht.

Und gewöhn dir bitte einen besseren Einrückungsstil an, üblich ist eine 
Einrückung von z.B. vier Leerzeichen pro Ebene, und dann auch dran 
halten, dann fallen einem falsch gesetzte Klammern leichter auf. Moderne 
IDEs wie Eclipse haben da einen Befehl, der das automatisch schön 
formatiert ;-)

von Schnee +. (mustermann)


Lesenswert?

WOW! Danke für deine Mühe!
Ich schreib den Code im JEdit, der macht automatisch eine Einrückung um 
einen Tabulator.
Eine Frage hab ich noch, wie schaut dann die while Schleife aus?

while (op = in.next().charAt(0);()){
if(!in.hasNextDouble()){
System.out.println("FALSCHE EINGABE");
return;}
}

hast du das so gemeint?

lg

von Johannes S. (johanness)


Lesenswert?

Nee, das op nicht in die While-Bedingung sondern direkt in den 
Schleifenkörper. In der Bedingung statt hasNextDouble einfach hasNext 
nehmen.

von Schnee +. (mustermann)


Lesenswert?

danke nochmal für dein Engagement!

lg, schnee

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.