Frage zu Beispielprogramm: "error: cannot find symbol"

brownSugar

Mitglied
Das folgende Beispielprogramm will nicht laufen:
Java:
public class Wurf {
    public static void main (String[] args) {
        Werfer werfer = new Werfer();
        werfer.werfen();
    }
} // end of class Wurf
class Werfer {
    void werfen () {
        Terminal.println("\nSchiefer Wurf\n");
        double v0 = Terminal.askDouble("v0 = ? ");
        double winkel = Terminal.askDouble("phi = ? ");
        double phi = bogen(winkel);
        Terminal.println(" ");
        Terminal.println(String.format("Die Weite ist %1.2f", weite(v0,phi)));
        Terminal.println(String.format("Die Höhe ist %1.2f", hoehe(v0,phi)));
    }
    private double weite ( double v0, double phi) {
        return (v0*v0)/G * Math.sin(2*phi);
    }
    private double hoehe ( double v0, double phi) {
        double s = Math.sin(phi);
        return (v0*v0)/(2*G)*(s*s);
    }
    private double bogen ( double grad ) {
        return grad * (Math.PI/180);
    }
    private double G = 9.81;
} // end of class Werfer
Quelle: Programmieren lernen: Eine grundlegende Einführung mit Java, Peter Pepper, 3. Aufl. 2007, S. 65.
Compiler meckert. Fehlermeldung ist:
Code:
Wurf.java:15: error: cannot find symbol
        Terminal.println(String.format("Die Höhe ist %1.2f", hoehe(v0,phi)));
        ^
  symbol:   variable Terminal
  location: class Werfer
6 errors
Ist mir da vielleicht ein Copy-and-paste Fehler unterlaufen? Anbei ein Screenshot vom Buch (auf amazon kann man die Seite 65 auch einsehen) Zwei Fragen hätte ich dazu noch: Im Buch steht
Java:
private double höhe ( double v0, double phi)
Muss da nicht
Java:
private double hoehe ( double v0, double phi)
stehen!? Und: Was tut das
Java:
werfer.werfen();
eigentlich ?

Bitte etwas Geduld! Ich lerne seit drei Tagen Java...
 

Anhänge

  • Programm Wurf.png
    Programm Wurf.png
    50,7 KB · Aufrufe: 33
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Wurf
{
	public static void main(String[] args) throws Exception
	{
		Werfer werfer = new Werfer();
		werfer.werfen();
	}
} // end of class Wurf

class Werfer
{
	void werfen() throws Exception
	{
		Terminal.println("\nSchiefer Wurf\n");
		double v0 = Terminal.askDouble("v0 = ? ");
		double winkel = Terminal.askDouble("phi = ? ");
		double phi = bogen(winkel);
		Terminal.println(" ");
		Terminal.println(String.format("Die Weite ist %1.2f", weite(v0, phi)));
		Terminal.println(String.format("Die Höhe ist %1.2f", hoehe(v0, phi)));
	}

	private double weite(double v0, double phi)
	{
		return (v0 * v0) / G * Math.sin(2 * phi);
	}

	private double hoehe(double v0, double phi)
	{
		double s = Math.sin(phi);
		return (v0 * v0) / (2 * G) * (s * s);
	}

	private double bogen(double grad)
	{
		return grad * (Math.PI / 180);
	}

	private double	G	= 9.81;
} // end of class Werfer

class Terminal 
{
	public static void println(String ausgabe)
	{
		System.out.println(ausgabe);
	}
	
	public static double askDouble(String frage) throws Exception
	{
		// Achtung, das ist eine recht simple implementation, das sollte man so nicht machen
		println(frage);
		BufferedReader leser = new BufferedReader(new InputStreamReader(System.in));
		double wert = Double.parseDouble(leser.readLine());
		return wert;
	}
}

Zu deinem Problem:

1:Wurf.java:15: error: cannot find symbol
2: Terminal.println(String.format("Die Höhe ist %1.2f", hoehe(v0,phi)));
3: ^
4: symbol: variable Terminal
5: location: class Werfer

Der Fehler sagt dir folgendes:
1: In Zeile 15 in Wurf.java wird ein Symbol nicht erkannt
2: Dabei handelt es sich um diesen Ausdruck
3: kannst du ignorieren
4: Das Symbol, welches in dem Ausdruck nicht erkannt wird ist die Variable Terminal
5: der Fehler Tritt in der Klasse Werfer auf

Java meint damit, dass er mit der Variable, so vermutet Java, dass es sich bei Terminal um eine handelt, nichts anfangen kann. Das liegt in diesem Fall daran, dass es in Java keine Klasse Terminal gibt. Diese ist vermutlich irgendwo im in deinem Buch erklärt oder zumindest referenziert. Ich habe mir mal erlaubt deinen Code zu erweitern und eine einfache Implementation der Klasse hinzuzufügen.
Damit sollte es dann gehen. Anzumerken ist, dass die Klasse Terminal eher zweckmäßig ist und weder schön noch sicher zu verwenden ist. Sie dient lediglich dazu deinen Code ausführbar zu machen.

private double hoehe ( double v0, double phi)
Ja, das wäre die bessere Art, da du ansonsten, wenn du den Source Code mit einem Programm aufmachst, welches ein anderes Encoding hat plötzlich wirre Zeichen hast. Gleiches kann passieren, wenn du Ausgaben machst.

Die Methode startet deine ganzen Berechnungen. Wenn ich das so sehe würde ich wohl annehmen, dass du den Nutzer nach ein paar Parametern fragst um einen Schiefen Wurf zu berechnen. Meine Physik Kenntnisse sind leider ziemlich verrostet, daher kann ich dir da, ohne selbst zu googlen, nicht mehr Sagen.
 
Danke für Deine schnelle Antwort! Dein Programm läuft. Danke auch für den Hinweis mit der Klasse Terminal. Auf S. 71 steht in der Tat, dass die im Programm Wurf verwendete Klasse Terminal nicht mit JAVA mitgeliefert wird, sondern selbst geschrieben wurde. Da muss man als Beginner erst einmal draufkommen: Auf S. 65 wird etwas verwendet, was auf S. 71 erklärt wird 🙂 Ich muss das jetzt erst mal in Ruhe durcharbeiten...

Edit: Die Im Anhang (S. 563) angegebene Web-Seiten zum herunterladen der Klasse "Terminal" existiert nicht mehr...🙁
 
Zuletzt bearbeitet:

Zurück
Oben