JavaScript verschachtelte If-Anweisung

Jo.Mo.

Aktives Mitglied
Hallo, ich habe Probleme bei der Umsetzung eines Struktogramms. Programm ist zwar HTML valide, auch läuft es ohne den Berechnungsteil durch, aber in dem habe ich irgendeinen Fehler, und weiss grad nicht woran es liegen könnte, vielleicht könnt ihr mir helfen.

Java:
//Variablen deklarieren
         var anzahlPersonen;
         var fahrzeugGewicht;
         var ticketPreis;

         //Werteingabe
         var anzahlPersonen = parseInt(prompt("Gib die Anzahl der Personen ein:"));
         var fahrzeugGewicht = parseInt(prompt("Gib das Fahrzeuggewicht ein:"));	

         //Berechnung
		 if (anzahlPersonen >= 1) || (fahrzeugGewicht >= 1) {ticketPreis=0;} {
			    
				
				 if (anzahlPersonen !> 3){ 
				     
					 if (fahrzeugGewicht !> 1000) {ticketPreis=anzahlPersonen*35;}
					 
					 else {ticketPreis=50+anzahlPersonen*35;}}
				 
				 
				 else {
				     
					 if (fahrzeugGewicht !> 1000) {ticketPreis=70+anzahlPersonen*20;}

                     else {ticketPreis=150+anzahlPersonen*20;}}}				 
		 
             
         
		 else {alert ("Wert zu gering!");}


         //Ausgabe
         alert ("Der Ticketpreis beträgt "+ ticketPreis +" Euro.");

PS. Ausserdem liefert der HTML-Validator Fehlermeldungen für "<" daher hab ich diese gegen ">=" oder "!>" getauscht - gibt es da eine elegantere Lösung...?
 
JAVA != JavaScript

und echt toller hinweis:

> Ich hab irgendeinen Fehler.

Kannst du nicht mal beschreiben was dein Fehler ist, oder sollen wir raten


>PS. Ausserdem liefert der HTML-Validator Fehlermeldungen für "<" daher hab ich diese gegen ">=" oder "!>" getauscht - gibt es da eine elegantere Lösung...?

JavaScript Code wird normaler Weise in HTML Kommentare geschreiben dann sollte dies auch dein Validator schlucken und du kannst wieder normal > und < verwenden
 
Zuletzt bearbeitet:
Dann mach die in jeder Zeile ein
Code:
alert
rein und überprüfe was und warum passiert.
Sicher, dass der Validator das
Code:
<
im JS-Code meinte?
 
Sorry, wusste nicht wo ich das Thema am besten posten sollte (habe ich einen dedizierten JS-Bereich übersehen...?)

War auch blöd formuliert: das Programm startet nicht,oder es kommen keine Eingabefenster. Sobald ich den Berechnungsteil mittels
/*
*/
ausblende, läuft es zumindest. Muss also ein Fehler in der Schleifenbedingung sein. Habe ich das korrekt verschachtelt, und stimmt die Syntax, mit den runden und geschweiften Klammern?
 
> (habe ich einen dedizierten JS-Bereich übersehen...?)

Ja hast du

aber wie andere schon geschreiben haben, diesen Operator gibt es in JavaScript nicht "!>"

und auch deinen Code könntest du mal schön formatieren
 
@nrg: Wie oben geschrieben, sollte eigentlich "<" sein, leider mag das der HTML-Validator nicht - mit !> gibt es keine Probleme, warum auch immer...

@XHelp: Jede Zeile, in der das "<" stand, gab aufgrund dessen einen Fehler aus. Als Lösungsvorschlag erhält man, das mit "&lt" zu ersetzen, was aber irgendwie keinen sinn ergibt...? Was das Problem mit dem "<" ist, täte mich auch ineressieren, vor allem da ">" ja kein problem darstellt... 🙁

@ARadauer: Ich habe mich da nach dem gerichtet, was ich so im Netz zum Thema Schleifen gefunden habe...also mit den {} Klammern... :bahnhof:
 
Zuletzt bearbeitet:
Das sieht nach einem Syntaxfehler aus. Entweder die ganze HTML hier packen oder selber gucken wo das Problem ist. Binäre Suche/Auskommentieren könnte da auch helfen.

@nrg: Wie oben geschrieben, sollte eigentlich "<" sein, leider mag das der HTML-Validator nicht - mit !> gibt es keine Probleme, warum auch immer...
und wie kamst du auf
Code:
!>
?
@XHelp: Jede Zeile, in der das "<" stand, gab aufgrund dessen einen Fehler aus. Als Lösungsvorschlag erhält man, das mit "&lt" zu ersetzen, was aber irgendwie keinen sinn ergibt...? Was das Problem mit dem "<" ist, täte mich auch ineressieren, vor allem da ">" ja kein problem darstellt... 🙁

Weil das Validator anscheinend das nicht als JS-Code angesehen hat. Es könnte auch am Programm liegen, aber höhstwahrscheinlich ist der fehler bei dir bzw. bei dem was du da gemacht hast.
 
Zuletzt bearbeitet:
@XHelp: Danke, hier mal komplett.

Java:
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <title>TicketPreis</title>
     <script type="text/javascript">
	 
	     /*
		 (1)Deklaration anzahlPersonen, fahrzeugGewicht Initialisierung durch Benutzereingabe
         (2)Wenn anzahlPersonen !> 1 oder fahrzeugGewicht !> 1 
		    dann Programmende
			 sonst setze ticketPreis := 0
         (3)Wenn anzahlPersonen !> 3		 
		         (4)Wenn fahrzeugGewicht !> 1000
				     dann setze ticketPreis := anzahlPersonen * 35
				 	 sonst setze ticketPreis := 50 + anzahlPersonen * 35
			sonst (anzahlPersonen >= 3) 
                  (5)Wenn fahrzeugGewicht !> 1000 
                      dann setze ticketPreis := 70 + anzahlPersonen * 20
                      sonst setze ticketPreis :=  150 + anzahlPersonen * 20
         (6)Ausgabe ticketPreis
         */		

         //Variablen deklarieren
         var anzahlPersonen;
         var fahrzeugGewicht;
         var ticketPreis;

         //Werteingabe
         var anzahlPersonen = parseInt(prompt("Gib die Anzahl der Personen ein:"));
         var fahrzeugGewicht = parseInt(prompt("Gib das Fahrzeuggewicht ein:"));	

         //Berechnung
		 if (anzahlPersonen >= 1) || (fahrzeugGewicht >= 1) {ticketPreis=0;} {
			    
				
				 if (anzahlPersonen !> 3){ 
				     
					 if (fahrzeugGewicht !> 1000) {ticketPreis=anzahlPersonen*35;}
					 
					 else {ticketPreis=50+anzahlPersonen*35;}}
				 
				 
				 else {
				     
					 if (fahrzeugGewicht !> 1000) {ticketPreis=70+anzahlPersonen*20;}

                     else {ticketPreis=150+anzahlPersonen*20;}}}				 
		 
             
         
		 else {alert ("Wert zu gering!");}


         //Ausgabe
         alert ("Der Ticketpreis beträgt "+ ticketPreis +" Euro.");

	 </script>
   </head>
<body>
</body>
</html>
 
if (anzahlPersonen >= 1) || (fahrzeugGewicht >= 1) {ticketPreis=0;} {

>
if ((anzahlPersonen >= 1) || (fahrzeugGewicht >= 1)){
ticketPreis=0;
}else {
...
}
 
...sobald ich jetzt den schriftlichen Ablaufplan mit < schreibe, spuckt der Validator diverse Fehler aus...

Java:
/*
		 (1)Deklaration anzahlPersonen, fahrzeugGewicht Initialisierung durch Benutzereingabe
         (2)Wenn [anzahlPersonen < 1 oder fahrzeugGewicht < 1] 
		    dann Programmende
			 sonst setze ticketPreis := 0
         (3)Wenn [anzahlPersonen < 3]		 
		         (4)[Wenn fahrzeugGewicht < 1000]
				     dann setze ticketPreis := anzahlPersonen * 35
				 	 sonst setze ticketPreis := 50 + anzahlPersonen * 35
			sonst [anzahlPersonen < 3] 
                  (5)[Wenn fahrzeugGewicht < 1000}] 
                      dann setze ticketPreis := 70 + anzahlPersonen * 20
                      sonst setze ticketPreis :=  150 + anzahlPersonen * 20
         (6)Ausgabe ticketPreis
         */

@ARadauer: startet trotzdem nicht....ich ändere jetzt erstmal die Gleichheitszeichen...
 
Zuletzt bearbeitet:
Also da gibt es jede Menge Probleme...
Code:
if (bla1 || bla2) {
} else {
}
sollte es heißen.
2. Kannst du nicht einfach irgendwelche Operatoren erfinden (
Code:
!>
gibts nicht)
3. Hast du irgendein Problem in zeile 33 mit den geschweiften Klammer

Was den Validator angeht: mach dir mal lieber sorgen, dass es funktioniert.

Nachtrag: egal welchen Browser du benutzen solltest, da wird es mit Sicherheit eine JS-Fehlerkonsole geben. Die solltest du dir schleunigst anschauen.
 
zum Problem mit dem Validator
Code:
<script type={"text/javascript">
<!--
alert("Hallo Welt!");
//-->
</script>
durch die html kommentare sollte der html validator den js code ignorieren.
 
...ich ändere die Zeichen nochmal so, wie es nach Algorithmus sein sollte.

Die geschweifte Klammer wird in Zeile 47 geschlossen...? Sprich alles dazwischen soll erfolgen, sofern die erste Bedingung erfüllt ist....

@ARadauer: steh' grad auf dem Schlauch. Was müsste ich da jetzt ändern...?
 
Zuletzt bearbeitet:
Java:
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <title>TicketPreis</title>
     <script type="text/javascript">
	 
	     /*
		 (1)Deklaration anzahlPersonen, fahrzeugGewicht Initialisierung durch Benutzereingabe
         (2)Wenn [anzahlPersonen < 1 oder fahrzeugGewicht < 1] 
		    dann Programmende
			 sonst setze ticketPreis := 0
         (3)Wenn [anzahlPersonen < 3]		 
		         (4)[Wenn fahrzeugGewicht < 1000]
				     dann setze ticketPreis := anzahlPersonen * 35
				 	 sonst setze ticketPreis := 50 + anzahlPersonen * 35
			sonst [anzahlPersonen < 3] 
                  (5)[Wenn fahrzeugGewicht < 1000}] 
                      dann setze ticketPreis := 70 + anzahlPersonen * 20
                      sonst setze ticketPreis :=  150 + anzahlPersonen * 20
         (6)Ausgabe ticketPreis
         */	

         //Variablen deklarieren
         var anzahlPersonen;
         var fahrzeugGewicht;
         var ticketPreis;

         //Werteingabe
         var anzahlPersonen = parseInt(prompt("Gib die Anzahl der Personen ein:"));
         var fahrzeugGewicht = parseInt(prompt("Gib das Fahrzeuggewicht ein:"));	

         //Berechnung
		 if ((anzahlPersonen < 1) || (fahrzeugGewicht < 1)) {ticketPreis=0;} {
			    
				
				 if (anzahlPersonen < 3){ 
				     
					 if (fahrzeugGewicht < 1000) {ticketPreis=anzahlPersonen*35;}
					 
					 else {ticketPreis=50+anzahlPersonen*35;}
				 }
				 
				 
				 else {
				     
					 if (fahrzeugGewicht < 1000) {ticketPreis=70+anzahlPersonen*20;}

                     else {ticketPreis=150+anzahlPersonen*20;}
					
			     }
					 
		  }

 					 
		  else {alert ("Wert zu gering!");}
         

         //Ausgabe
         alert ("Der Ticketpreis beträgt "+ ticketPreis +" Euro.");
     
	 </script>
   </head>
<body>
</body>
</html>
 

??? Ich verstehe nicht ganz, worauf du hinauswillst... ich hab es eingerückt, sowie die Kommentare rein textuell verfasst:

Java:
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <title>TicketPreis</title>
     <script type="text/javascript">
	 
	     /*
		 (1)Deklaration anzahlPersonen, fahrzeugGewicht Initialisierung durch Benutzereingabe
         (2)Wenn anzahlPersonen kleiner 1 oder fahrzeugGewicht kleiner 1 
		    dann Programmende
			 sonst setze ticketPreis := 0
         (3)Wenn anzahlPersonen kleiner 3		 
		         (4)Wenn fahrzeugGewicht kleiner 1000
				     dann setze ticketPreis := anzahlPersonen * 35
				 	 sonst setze ticketPreis := 50 + anzahlPersonen * 35
			sonst 
                  (5)Wenn fahrzeugGewicht kleiner 1000 
                      dann setze ticketPreis := 70 + anzahlPersonen * 20
                      sonst setze ticketPreis :=  150 + anzahlPersonen * 20
         (6)Ausgabe ticketPreis
         */	

         //Variablen deklarieren
         var anzahlPersonen;
         var fahrzeugGewicht;
         var ticketPreis;

         //Werteingabe
         var anzahlPersonen = parseInt(prompt("Gib die Anzahl der Personen ein:"));
         var fahrzeugGewicht = parseInt(prompt("Gib das Fahrzeuggewicht ein:"));	

         //Berechnung
		 if ((anzahlPersonen < 1) || (fahrzeugGewicht < 1)) {ticketPreis=0;} {
			    
				
				 if (anzahlPersonen < 3){ 
				     
					 if (fahrzeugGewicht < 1000) {ticketPreis=anzahlPersonen*35;}
					 
					 else {ticketPreis=50+anzahlPersonen*35;}
				 }
				 
				 
				 else {
				     
					 if (fahrzeugGewicht < 1000) {ticketPreis=70+anzahlPersonen*20;}

                     else {ticketPreis=150+anzahlPersonen*20;}
					
			     }
					 
		  }

 					 
		  else {alert ("Wert zu gering!");}
         

         //Ausgabe
         alert ("Der Ticketpreis beträgt "+ ticketPreis +" Euro.");
     
	 </script>
   </head>
<body>
</body>
</html>
 
...nein, die Frage ist nach wie vor, wo im Berchnungsablauf der Fehler liegt. Das Programm lässt sich leider nicht starten, bzw. kommen nicht die Eingabefenster für die einzelnen Werte.

Ich vermute den Fehler hinter den Bezeichnungen (also fahrzeugGewicht usw.) in der Berechnung, da ich ja bei die Eingabe wegen JavaScript parsen muss...vielleict lässt sich das in den Bedingungen mit "parseInt(fahrzeugGewicht)" umgehen...?
 
Ich vermute den Fehler in der Zeile 33 (im neuen Code), auf welchen man dich schon 2 mal hingewiesen hat.
was soll denn:
Code:
if (bla) {irgendwas} {nochmehr}
sein?
 
...wie ich schon im Titel schrieb, sollte das eigentlich eine verschachtelte if-Anweisung sein. Dass sie nicht korrekt sein kann, ist offensichtlich, da ich nicht so firm damit bin, habe ich um Hilfe gebeten.

Ich weiss nicht, ob es zwangsläufig immer nach

if
else if
else if

aufgebaut sein muss, denn das wären ja 3 gleichrangige Anweisungen (auch nacheinander abgearbeitet), ich bin halt nicht sicher, ob ich eine Verschachtelung auch so aufbauen muss/kann..
 
Dann versuche es mit:
Code:
if (anzahl>=0) {
  ticketPreis=0;
  if (anzahl<3) {
    ....
  } else {
    ....
  }
}
 
Dass sie nicht korrekt sein kann, ist offensichtlich, da ich nicht so firm damit bin, habe ich um Hilfe gebeten.
Ich bin eigentlich der Meinung das in einem Fachforum nicht die korrekte Syntax von If erklärt werden muss aber naja

Code:
if(bedingung){
//code
}else if(bedingung){
//code
}else{
//code
}

das hier:
Java:
{ticketPreis=0;} {
ist müll!
 
...bis auf den Inhalt der ersten Bedingung habe ich es doch so, oder sollte da der Fehler liegen? also statt (anzahl>=0) sollte doch (anzahl < 1) das gleiche ergeben...?

@ARadauer: Wie ich schon schrieb, würde ich nicht fragen, falls mir nach der Lektüre von Büchern und Beschreibungen mein Fehler klar geworden wäre. Sorry.

Leider hilft mir auch dein Tip nichtviel weiter. Das das mit ticketPreis=0 Müll ist, mag sein, aber ich möchte halt, dass wenn die erste Bedingung nicht erfüllt ist, er den Wert ticketPreis=0 setzt und dann in die entsprechende (verschachtelte) if-Anweisung geht.
 
Zuletzt bearbeitet:
Nein, das was du hast ist falsch und da liegt der Unterschied.
Eine Zahl, die größer gleich 0 ist, ist nicht das gleiche wie eine Zahl, die kleiner als 1 ist :bahnhof:
 
Hier mal der Ausgangsalgorithmus. Ich möchte ja auf < 1 prüfen, und nicht auf >0... Ziemlich sicher habe ich in der Abarbeitung einen Denkfehler, aber ich will den Ablauf deswegen nicht gleich auf den Kopf stellen...

alg.jpg
 
Dann mach es doch, ohne Operatoren und Syntax zu erfinden:
Code:
if ((anzahlPersonen<1) || (fahrzeugGewicht<1)) {
  //mach nix
} else {
  ticketpreis = 0;
  if (anzahlPersonen<3) {
    if (fahrzeugGewicht<1000) {
      //bla
    } else {
      //anderes bla
    }
  } else {
    if (fahrzeugGewicht<1000) {
      //was anderes
    } else {
      //und wieder was neues
    }
  }
  //ausgabe
}
 

Zurück
Oben