Das fertige Programm steht unten.
Das vollständige Programm kann kopiert, in einen Editor eingefügt und auf die übliche Weise ausgeführt werden.
import java.util.Scanner;
// Anwender wählt den Endwert für die Zeit, t
// Das Programm berechnet und gibt die Entfernung aus,
// die der Ziegelstein in der Zeit t zurückgelegt hat
//
class FallenderZiegelstein
{
public static void main (String[] args )
{
final double G = 9.80665; // Konstante für Gravitationsbeschleunigung
int t, zeit; // Zeit in Sekunden und Endwert der Zeit
double entfernung; // die Entfernung, die der Ziegelstein
// zurückgelegt hat
Scanner scan = new Scanner( System.in );
System.out.println( "Zeit in Sekunden:" );
zeit = scan.nextInt();
// Übschrift ausgeben
System.out.println( "Sekunden\tEntfernung" );
System.out.println( "-------\t--------" );
t = 0 ;
while ( t <= zeit )
{
entfernung = (G * t * t)/2 ;
System.out.println( t + "\t" + entfernung );
t = t + 1 ;
}
}
}
Wir könnten ebenfalls schreiben entfernung = 0.5 * G * t * t ;
bzw.
entfernung = (1.0 / 2.0) * G * t * t ;
.
Was waren die zwei Fallen beim Übersetzen der Formel?
Wenn wir sie mit
(1/2) * G * t * t
übersetzt hätten,
wären wir in die erste Falle gegangen.
(1/2) fordert eine Ganzzahl-Division von 1 durch 2, Ergebnis 0.
Wenn wir die Formel mit
1/2 * G * t * t
,
übersetzt hätten, wären wir in
die zweite Falle gegangen.
Für den Compiler,
sieht das aus wie die erste falsche Formel
(da "/" die gleiche Präzedenz wie "*" hat).
Ein drittes Problem ist die Berechnung des Quadrats.
Wir multiplizieren t
mit t
.
Jetzt einmal angenommen wir wollen eine Tabelle, um die Erhöhung der Zeit in 0.1 Sekundenschritten zu zeigen. Wir modifizieren das Programm, so dass es das mit einem Maximum an Genauigkeit tut. Der Anwender wird immer noch den Endwert in Sekunden eingeben.