2 Ausgaben, aber nur 1 gewollt.

Status
Nicht offen für weitere Antworten.
O

OhMannoMann

Gast
Hey,
ich hab folgendes Programm geschrieben, welches den abstand eines punktes r zu einer geraden pq ausrechnen soll.

Code:
//Samantha Vordermeier GOB1B

public class Dist
{
	public static void main(String... args)
	{
	
		double xp = Double.parseDouble(args[0]);
		double yp = Double.parseDouble(args[1]);
		double xq = Double.parseDouble(args[2]);
		double yq = Double.parseDouble(args[3]);
		double xr = Double.parseDouble(args[4]);
		double yr = Double.parseDouble(args[5]);
		double m;
		double t1;
		double t2;
		double xl;
		double yl;
		double Dist;
		
			if (xq - xp == 0)
					{
					Dist = Math.abs(xp - xr);
					System.out.println(Dist);
					}
			

			m = (yq - yp) / (xq - xp);	
			
			if(m == 0)
					{
					Dist = yr - yp;
					System.out.println(Dist);
					}
                  
			else if(m != 0)
					{
					t1 = yp - ((yq-yp) / (xq-xp)) * xp;
					m = (yq - yp) / (xq -xp);
					xl = (yr + xr/m - t1) / (m + 1/m);
					yl = m * xl + t1;
					Dist = Math.sqrt((xl-xr) * (xl-xr) + (yl-yr) * (yl-yr));
					System.out.println(Dist);
					}
		
		
	}
}

Sollte soweit eigentlich stimmen, allerdins bekomm ich den Abstand in einer Zeile ausgespuckt, und darunter immer NaN.

imac:prakt2 Sam$ java Dist 1 11 1 4 6 9
5.0
NaN

Woher kommt die zweite ausgabe und wie krieg ich die weg?

Schon mal Dangge.....Sam
 

Fu3L

Top Contributor
NaN bedeutet Not a Number. Du wirst wahrscheinlich die Wurzel aus einer negativen Zahl gezogen haben...

Edit: Wenn du die Zweite Ausgabe weghaben willst, musst du wohl die ifs und elses und else ifs so schreiben müssen, dass immer nur eine Bedingung erfüllt ist...
 
O

OhMannoMann

Gast
Hey,
wenn ich zwei quadriete zahlen addiere kanns ned negativ werden....
ich hab ja schließlich ((xl-xr) * (xl-xr) + (yl-yr) * (yl-yr)) in der wurzel stehen, und das ist immer positiv.
 

Fu3L

Top Contributor
OhMannoMann hat gesagt.:
Hey,
wenn ich zwei quadriete zahlen addiere kanns ned negativ werden....
ich hab ja schließlich ((xl-xr) * (xl-xr) + (yl-yr) * (yl-yr)) in der wurzel stehen, und das ist immer positiv.

Das stimmt... (Als nicht-hobby-mathematiker is sowas echt schwer zu lesen)

Da weiß ich auch grad nicht weiter... Lass dir am besten nach jedem Rechnschritt die Werte mit System.out.println() ausgeben, dann findest du vllt die Stelle an ders dir das NaN reinhaut...
 
O

OhMannoMann

Gast
Tja, das hab ich leider alles schon probiert...
lustiger weise haut es mir das nan auch nur bei den (und denen ähnlichen) koordinaten raus, und nicht bei allen....
 

Fu3L

Top Contributor
Ich glaub ich weiß worans liegt, habs mal in mein Eclipse gepackt:
Das:

Code:
t1 = yp - ((yq-yp) / (xq-xp)) * xp;
               System.out.println(t1);

spuckt mir Infinity aus. Also hast du durch 0 geteilt. Und wenn du mit Infinity weiterrechnsest erhälst du irgendwann NaN...

Edit: Die nächste Zeile spuckt -Infinity aus und die beiden danach dann NaN...
 

Legion

Mitglied
ah dreck, da war einer schneller, aber ich habs evtl genauer...

ich hab mal für dich die drecksarbeit gemacht.


Code:
public class Dist 
{ 
   public static void main(String... args) 
   { 
    
      double xp = Double.parseDouble(args[0]); 
      double yp = Double.parseDouble(args[1]); 
      double xq = Double.parseDouble(args[2]); 
      double yq = Double.parseDouble(args[3]); 
      double xr = Double.parseDouble(args[4]); 
      double yr = Double.parseDouble(args[5]); 
      double m; 
      double t1; 
      double t2; 
      double xl; 
      double yl; 
      double Dist; 
       
         if (xq - xp == 0) 
               { 
               Dist = Math.abs(xp - xr); 
               System.out.println(Dist); 
               } 
          

         m = (yq - yp) / (xq - xp);    
          
         if(m == 0) 
               { 
               Dist = yr - yp; 
               System.out.println(Dist); 
               } 
                  
         else if(m != 0) 
               { 
               t1 = yp - ((yq-yp) / (xq-xp)) * xp; 
               m = (yq - yp) / (xq -xp);                    // <--- m = NaN
               xl = (yr + xr/m - t1) / (m + 1/m); 
               yl = m * xl + t1; 
               Dist = Math.sqrt((xl-xr) * (xl-xr) + (yl-yr) * (yl-yr)); 
               System.out.println(Dist);                   // <--- Hier spuckt er NaN aus
               } 
       
       
   } 
}

ich hab dir oben die fehlerhaften stellen markiert. woran das liegt? ganz einfach:
m = (yq - yp) / (xq -xp); xp und xq sind jeweils 1 also kommt da 0 raus. durch 0 teilt man nicht.
mit ein paar System.outs hättest du das sicher auch gefunden...
 
O

OhMannoMann

Gast
Hey,
erst mal Danke für die Mühe, hab mittlerweile den fehler selber gefunden.
das mit der Division durch 0 habe ich ja eigentlich mit if (xq - xp == 0) ausgeschlossen.
allerdings hätte ich das m nur weiter oben definieren müssen und alles in eine if schleife. jetzt gehts.

also sieht jetzt so aus und funzt

Code:
public class Dist 
{ 
   public static void main(String... args) 
   { 
    
      double xp = Double.parseDouble(args[0]); 
      double yp = Double.parseDouble(args[1]); 
      double xq = Double.parseDouble(args[2]); 
      double yq = Double.parseDouble(args[3]); 
      double xr = Double.parseDouble(args[4]); 
      double yr = Double.parseDouble(args[5]); 
      double m; 
      double t1; 
      double xl; 
      double yl; 
      double Dist; 


        m = (yq - yp) / (xq - xp);  

         if (xq - xp == 0) 
               { 
               Dist = Math.abs(xp - xr); 
               System.out.println(Dist); 
               } 
          
          
         else if(m == 0) 
               { 
               Dist = yr - yp; 
               System.out.println(Dist); 
               } 
                  
         else if(m != 0) 
               { 
               t1 = yp - ((yq-yp) / (xq-xp)) * xp; 
               m = (yq - yp) / (xq -xp);                    // <--- m = NaN 
               xl = (yr + xr/m - t1) / (m + 1/m); 
               yl = m * xl + t1; 
               Dist = Math.sqrt((xl-xr) * (xl-xr) + (yl-yr) * (yl-yr)); 
               System.out.println(Dist);                   // <--- Hier spuckt er NaN aus 
               } 
        
        
   } 
}
 

Landei

Top Contributor
Ein wenig "Stilistik":
- Variablen immer klein schreiben (außer static final, aber das sind ja auch i.d.R. Konstanten), also nicht Dist
- der letzte Test else if(m != 0) ist überflüssig, else reicht
- Variablen erst definieren, wenn du sie brauchts, das vermeidet versehentlich Zugriffe auf nicht initialisierte Variablen. Wir machen hier schließlich kein Pascal :-D
- Versuche dich bei der Klammerung an einen Standard zu halten (der von Sun ist am verbreitetsten und nicht so übel), sonst kriegt man Augenkrebs
- In deinem Mini-Beispiel hier ist es zwar egal, aber du solltest Berechnung und Ausgabe in der Regel voneinander trennen. Hättest du eine Funktion, die dir dist ausrechnet statt ausgibt, könntest du sie einfach wiederverwenden.
- Es ist ein netter Zug, den Nutzer darauf hinzuweisen, wieviel Argumente das Programm erwartet

Ich weiß, das ist viel Nörgelei auf einmal, aber um so früher man sich daran gewöhnt, umso besser.

Über Geschmack läßt sich bekanntlich streiten, aber ich würde es in etwa so schreiben:
Code:
public class Dist {

    public static double distance(double xp, double yp, double xq, double yq, double xr, double yr) {
        if (xq - xp == 0) {
            return Math.abs(xp - xr);
        } else if (yq - yp == 0) {
            return yr - yp;
        } else {
            double t1 = yp - ((yq - yp) / (xq - xp)) * xp;
            double m = (yq - yp) / (xq - xp);
            double xl = (yr + xr / m - t1) / (m + 1 / m);
            double yl = m * xl + t1;
            return Math.sqrt((xl - xr) * (xl - xr) + (yl - yr) * (yl - yr));
        }
    }

    public static void main(String... args) {
        if (args.length != 6) {
            System.out.println("usage: java Dist <xp> <yp> <xq> <yq> <xr> <yr>");
        } else {
            System.out.println(distance(
                    Double.parseDouble(args[0]),
                    Double.parseDouble(args[1]),
                    Double.parseDouble(args[2]),
                    Double.parseDouble(args[3]),
                    Double.parseDouble(args[4]),
                    Double.parseDouble(args[5])));
        }
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Wie kommen diese Ausgaben zustande? Java Basics - Anfänger-Themen 12
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
B Grundsatzfragen zu meinem neuen Projekt Einnahmen-Ausgaben App Java Basics - Anfänger-Themen 8
A Wieso bekomme ich hier zwei unterschiedliche Ausgaben? Java Basics - Anfänger-Themen 6
S Ein- Ausgaben Java [Hilfe] Java Basics - Anfänger-Themen 3
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
ralfb1105 Ausgaben von ProcessBuilder Prozess "streamen" Java Basics - Anfänger-Themen 25
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
O Wie Log4J - Ausgaben/Events auffangen?! Java Basics - Anfänger-Themen 3
J ausgaben von der konsole in das fenster Java Basics - Anfänger-Themen 5
W Array in String und String in Array - falsche Ausgaben Java Basics - Anfänger-Themen 20
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
V Personenverwaltung mit List<>, falsche Ausgaben Java Basics - Anfänger-Themen 5
Z GUI-Ausgaben. Java Basics - Anfänger-Themen 11
G Wie bekomme ich alle Ausgaben von runTime.exec() Java Basics - Anfänger-Themen 7
C Erste Schritte Boolsche For-Schleife soll Ausgaben mitzählen Java Basics - Anfänger-Themen 8
W Ausgaben in JAVA Java Basics - Anfänger-Themen 7
J Eclipse Console Ausgaben Abfangen Java Basics - Anfänger-Themen 2
H Mysteriöse Ausgaben nach Addition Java Basics - Anfänger-Themen 5
D Methoden und Ausgaben Java Basics - Anfänger-Themen 4
A [gelöst]Zwei Ausgaben, die eigentlich gleich sein sollten Java Basics - Anfänger-Themen 9
S Hilfe bei Ausgaben durch Konsolenprogramm Java Basics - Anfänger-Themen 13
Screen Verzögerung zwischen Ausgaben Java Basics - Anfänger-Themen 5
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
G Farbige / unterstrichene Ausgaben auf der Konsole! Java Basics - Anfänger-Themen 2
G Erstellung von HTML Ausgaben Java Basics - Anfänger-Themen 5
F DOS Ausgaben einlesen Java Basics - Anfänger-Themen 14
S exe-Datei ausführen, Ausgaben einlesen? Java Basics - Anfänger-Themen 3
K String in JTextfield formatiert ausgaben Java Basics - Anfänger-Themen 5
S Bei Ausgaben von Objekten wird Klassenname@Zahl ausgegeben Java Basics - Anfänger-Themen 9
R Ausgaben von externer .exe einlesen Java Basics - Anfänger-Themen 2
C Ausgaben mit der Paint-Methode Java Basics - Anfänger-Themen 5
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
L Mergesort (aber anders) Java Basics - Anfänger-Themen 2
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
OSchriever Jar-Programm läuft auf Windows aber nicht auf Linux(Raspberri Pi4) Java Basics - Anfänger-Themen 22
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
AGW App programmiert lassen, aber Änderungen vornehmen Java Basics - Anfänger-Themen 13
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
J Mit OpenJDK entwickeln aber Oracle SE Runtime installieren? Java Basics - Anfänger-Themen 6
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
A Java-Programm läuft bei installierter JDK aber nicht mit JRE? Java Basics - Anfänger-Themen 5
C Statischer Typ aber Variable nicht statisch? Java Basics - Anfänger-Themen 5
J ShortCut erstellen aber wie die dll einbinden Java Basics - Anfänger-Themen 3
I "\n" aus ArrayList enfernen, aber wie?! Java Basics - Anfänger-Themen 4
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
J JavaEditor kompiliert aber startet nicht Java Basics - Anfänger-Themen 1
B Email versand - aber akzeptiert auch falscher Username und Passwort??? Java Basics - Anfänger-Themen 1
O Array benutzen aber WIE? Java Basics - Anfänger-Themen 18
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
A Variabler Rekursionsaufruf, aber wie? Java Basics - Anfänger-Themen 6
N Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben Java Basics - Anfänger-Themen 22
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
J Serialisieren, aber wie? Java Basics - Anfänger-Themen 3
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
snipesss Java-Code gedownloaded, funktioniert aber nicht? Java Basics - Anfänger-Themen 9
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
P Irgendein billiger Fehler aber ich find ihn nicht Java Basics - Anfänger-Themen 16
Thallius Date für DatePicker formatieren aber wie? Java Basics - Anfänger-Themen 9
J Nullpointer aber wo? Java Basics - Anfänger-Themen 12
E Dumme Frage, aber... Java Basics - Anfänger-Themen 15
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben