# JavaScript verschachtelte If-Anweisung



## Jo.Mo. (6. Mai 2011)

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.


```
//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...?


----------



## AmunRa (6. Mai 2011)

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


----------



## XHelp (6. Mai 2011)

Dann mach die in jeder Zeile ein 
	
	
	
	





```
alert
```
 rein und überprüfe was und warum passiert.
Sicher, dass der Validator das 
	
	
	
	





```
<
```
 im JS-Code meinte?


----------



## nrg (6. Mai 2011)

was soll !> für ein Operator sein??


----------



## Jo.Mo. (6. Mai 2011)

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?


----------



## ARadauer (6. Mai 2011)

ich würd mal den Code sinnvoll formatieren.



> if (anzahlPersonen >= 1) || (fahrzeugGewicht >= 1) {ticketPreis=0;} {


wtf!!!


----------



## AmunRa (6. Mai 2011)

> (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


----------



## Jo.Mo. (6. Mai 2011)

@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:


----------



## XHelp (6. Mai 2011)

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.



Jo.Mo. hat gesagt.:


> @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 
	
	
	
	





```
!>
```
 ?


> @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.


----------



## ARadauer (6. Mai 2011)

Wo das Problem ist? In der zeile die ich gepostet habe... das ist nicht die syntax von if die ich kenne....


----------



## Jo.Mo. (6. Mai 2011)

@XHelp: Danke, hier mal komplett. 


```
<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>
```


----------



## ARadauer (6. Mai 2011)

if (anzahlPersonen >= 1) || (fahrzeugGewicht >= 1) {ticketPreis=0;} {

>
if ((anzahlPersonen >= 1) || (fahrzeugGewicht >= 1)){
   ticketPreis=0;
}else {
...
}


----------



## Jo.Mo. (6. Mai 2011)

...sobald ich jetzt den schriftlichen Ablaufplan mit < schreibe, spuckt der Validator diverse Fehler aus...


```
/*
		 (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...


----------



## maki (6. Mai 2011)

*verschoben*


----------



## XHelp (6. Mai 2011)

Also da gibt es jede Menge Probleme...

```
if (bla1 || bla2) {
} else {
}
```
sollte es heißen.
2. Kannst du nicht einfach irgendwelche Operatoren erfinden (
	
	
	
	





```
!>
```
 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.


----------



## ARadauer (6. Mai 2011)

zum Problem mit dem Validator

```
<script type={"text/javascript">
<!--
alert("Hallo Welt!");
//-->
</script>
```
durch die html kommentare sollte der html validator den js code ignorieren.


----------



## Trollpost (6. Mai 2011)

nrg hat gesagt.:


> was soll !> für ein Operator sein??


!> == <


----------



## Jo.Mo. (6. Mai 2011)

...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...?


----------



## XHelp (6. Mai 2011)

Jo.Mo. hat gesagt.:


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



Welche geschweifte Klammer? Ich sehe da 3 :bahnhof: Rück den Code sinnvoll ein, dann siehst du auch wo was geschlossen werden soll.


----------



## Jo.Mo. (6. Mai 2011)

```
<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>
```


----------



## XHelp (6. Mai 2011)

Jo.Mo. hat gesagt.:


> //NUR CODE



Ja, und?


----------



## Jo.Mo. (6. Mai 2011)

XHelp hat gesagt.:


> Ja, und?



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


```
<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>
```


----------



## XHelp (6. Mai 2011)

Jo.Mo. hat gesagt.:


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



Da keine Frage mehr besteht, ist das Thema wohl erledigt?


----------



## Jo.Mo. (6. Mai 2011)

...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...?


----------



## XHelp (6. Mai 2011)

Ich vermute den Fehler in der Zeile 33 (im neuen Code), auf welchen man dich schon 2 mal hingewiesen hat.
was soll denn: 
	
	
	
	





```
if (bla) {irgendwas} {nochmehr}
```
 sein?


----------



## Jo.Mo. (6. Mai 2011)

...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..


----------



## XHelp (6. Mai 2011)

Dann versuche es mit:

```
if (anzahl>=0) {
  ticketPreis=0;
  if (anzahl<3) {
    ....
  } else {
    ....
  }
}
```


----------



## ARadauer (6. Mai 2011)

Jo.Mo. hat gesagt.:


> 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


```
if(bedingung){
//code
}else if(bedingung){
//code
}else{
//code
}
```

das hier:

```
{ticketPreis=0;} {
```
ist müll!


----------



## Jo.Mo. (6. Mai 2011)

...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.


----------



## XHelp (6. Mai 2011)

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:


----------



## Jo.Mo. (6. Mai 2011)

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...


----------



## XHelp (6. Mai 2011)

Dann mach es doch, ohne Operatoren und Syntax zu erfinden:

```
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
}
```


----------



## Jo.Mo. (6. Mai 2011)

Danke! Habs grad nochmal korrigiert, jetzt läuft es wie gewünscht, lag an 2 völlig dumm gesetzten Klammern.


----------

