Ich habe bereits fast vollständig den Code zur Aufgabenstellung verfasst, allerdings fehlt mir hier eine Feinheit:
Zeile: 20, 33, 34
Tun nicht das, was ich eigentlich möchte.
Wenn ich eine falsche Eingabe tätige, dann soll die Dialogbox wieder öffnen. Ich will das gerne mit diesem boolean ende lösen, falls das geht.
Bsp.:
Eingabe:
Winkel: 45
Abwurfgeschwindigkeit: 45AW
-> OK, Box schließen
Winkel: 45A
->Falsch, da nur Zahlwert erlaubt -> Box erneut öffnen, nicht danach noch nach der Abwurfgeschwindigkeit fragen
Winkel: 45
Abwurfgeschwindigkeit: 45
-> Falsch, da AW am Ende fehlt -> Box erneut öffnen von Beginn
Nachtrag: Hat jemand eine Ahnung, weshalb bei der Ergebnisausgabe das Wertepaar 16 komplett außerhalb der Zeile liegt? Ist das nur ein Anzeigefehler meines Editors (obwohl ich verschiedene verwendet habe gerade) oder ist das auf irgendwas zurückzuführen? Weil eigentlich wird doch in der Zeile nichts anders gemacht als in den anderen.
Zeile: 20, 33, 34
Tun nicht das, was ich eigentlich möchte.
Wenn ich eine falsche Eingabe tätige, dann soll die Dialogbox wieder öffnen. Ich will das gerne mit diesem boolean ende lösen, falls das geht.
Bsp.:
Eingabe:
Winkel: 45
Abwurfgeschwindigkeit: 45AW
-> OK, Box schließen
Winkel: 45A
->Falsch, da nur Zahlwert erlaubt -> Box erneut öffnen, nicht danach noch nach der Abwurfgeschwindigkeit fragen
Winkel: 45
Abwurfgeschwindigkeit: 45
-> Falsch, da AW am Ende fehlt -> Box erneut öffnen von Beginn
Java:
import java.io.*;
import javax.swing.*;
import java.util.*;
public class Uebung {
public static void main (String[] args) {
String zahlString = "";
boolean ende = true;
double tFlug = 0, sxMax = 0, syMax = 0;
double awGeschw = 0;
double g=9.81;
double winkel;
System.out.println("=========================================================");
System.out.println("=== Programm zur Berechnung der Flugbahn eines Wurfes ===");
System.out.println("=========================================================");
String eing = "";
//do {
eing = JOptionPane.showInputDialog("Geben Sie den Abwurfwinkel in Grad ein:");
winkel = Double.parseDouble(eing);
eing = JOptionPane.showInputDialog("Geben Sie die Abwurfgeschwindigkeit in Form xxAW ein:");
if(eing.endsWith("AW")) {
int limit = eing.length()-2;
zahlString = eing.substring(0,limit);
}
else {
System.out.println("Falsche Eingabe.");
}
awGeschw = Double.parseDouble(zahlString);
//}
//while(ende);
tFlug=tFlug(winkel, awGeschw);
sxMax=sx(winkel, awGeschw, tFlug);
syMax=sy(winkel, awGeschw, tFlug/2);
System.out.println("Abwurfwinkel: " +winkel +" Grad");
System.out.println("Abwurfgeschwindigkeit: " +awGeschw +" m/s");
System.out.println("---------------------------------------------------------");
System.out.println("Die Flugzeit betraegt: " +tFlug +" s");
System.out.println("Die Flugweite betraegt: " +sxMax +" m");
System.out.println("Die max. Flughoehe betraegt: " +syMax +" m");
int zeitschritte = 20;
double zeitFeld[] = new double [zeitschritte];
double xFeld[] = new double [zeitschritte];
double yFeld[] = new double [zeitschritte];
double flugzeit = 0;
double deltaT = tFlug/zeitschritte;
for(int i=0; i<zeitschritte; i++) {
flugzeit = flugzeit+deltaT;
zeitFeld[i]=flugzeit;
xFeld[i]=sx(winkel, awGeschw, flugzeit);
yFeld[i]=sy(winkel, awGeschw, flugzeit);
}
FileWriter fileW;
try {
fileW = new FileWriter("Ergebnis.txt");
for(int i=0; i<zeitschritte; i++) {
fileW.write("Wertepaar " +i +":\t Zeit: " +zeitFeld[i] +"\t x = " +xFeld[i] +"\t y = " +yFeld[i] +"\n"); // \n nicht vergessen, sonst keine neue Zeile
}
fileW.close();
System.out.println("Ergebnis ausgegeben in Ergebnis.txt");
}
catch (IOException e) {
System.out.println("Ergebnisse erfolgt, Ergebnis in Ergebnis.txt hinterlegt");
}
System.exit(0);
}
//Ab hier drunter Methoden:
public static double tFlug(double winkel, double awGeschw) {
final double g = 9.81;
return ((2*Math.sin(Math.toRadians(winkel))*awGeschw)/g);
}
public static double sy(double winkel, double awGeschw, double tFlug) {
final double g = 9.81;
return (awGeschw*Math.sin(Math.toRadians(winkel))*tFlug-((1/2.)*g*Math.pow(tFlug,2)));
}
public static double sx(double winkel, double awGeschw, double tFlug) {
final double g = 9.81;
return (awGeschw*Math.cos(Math.toRadians(winkel))*tFlug);
}
}
Nachtrag: Hat jemand eine Ahnung, weshalb bei der Ergebnisausgabe das Wertepaar 16 komplett außerhalb der Zeile liegt? Ist das nur ein Anzeigefehler meines Editors (obwohl ich verschiedene verwendet habe gerade) oder ist das auf irgendwas zurückzuführen? Weil eigentlich wird doch in der Zeile nichts anders gemacht als in den anderen.
Anhänge
Zuletzt bearbeitet: