2017-03-23 7 views
0

Also für die Schule mache ich ein Projekt mit kleinen grundlegenden, Idee ist sehr einfach, genau wie meine Frage. Ich mache eine Art Spielsimulator.Small Basic if-statement

ready: 
TextWindow.WriteLine("Do you want to bet? yes(1) or no(2).") 
answer = TextWindow.ReadNumber() 
If answer = 1 Then 
    Goto start 
Else 
    Goto ready 
    EndIf 
    start: 
TextWindow.WriteLine("Ok lets go.") 
points = 100 
var1 = Math.GetRandomNumber(10) 
If 5 < var1 < 9 Then 
    points = points + 100 
ElseIf 9 < var1 < 10 then 
    points = points + 200 
Elseif 1 < var1 < 5 then 
    points = points - 100 
EndIf 

TextWindow.WriteLine("You rolled " + var1 + ". You now have " + points + " points.") 

Das Problem im Verkleidung ist, dass, was auch immer zu meinem var1 geschieht 100 bis meine Punkte hinzugefügt wird, auch wenn var1 zum Beispiel ist 1 oder 10.

Ich habe meinen Lehrer gefragt, er konnte mir nicht erklären, was falsch war. was soll ich tun?

danke im voraus

+0

Problem ist in 'Goto bereit '. Es gibt keinen 'ready:' -Block, also läuft der Code ohne einen Sprung weiter und 'points = 100' wird die ganze Zeit ausgeführt. Viel Glück und gute Programmierung! –

+0

ist nicht 'bereit' Block in der ersten Zeile? – koceeng

+0

Ich bin kein Smallbasic-Experte, aber nach dem googlen für eine Weile denke ich 'Wenn x koceeng

Antwort

0

Sie hatten drei Probleme.

  1. Wie + koceeng vorgeschlagen, Dosis Small Basic unterstützt die "x < y < z" Struktur. Schlimmer ist die Tendenz von Small Basic, auszufallen, was bedeutet, dass dies kompiliert wird, aber ich werde nicht das erwartete Ergebnis liefern. Die richtige Struktur für diese Logik ist "x < y und y < z". Mit anderen Worten, alle Logik ist binär und Vergleiche sollten nur paarweise vorkommen.
  2. Sie haben einen logischen Fehler, wenn Sie von if nach if-else wechseln. "5 < var1 und var1 < 9" kombiniert mit "9 < var1 und var1 < 10" hat ein Loch drin. Neun fällt aus der Logik und die if-Anweisung passt nie darauf. Das Gleiche passiert mit der 5. Die richtige Kombination verwendet ein Gleichheitszeichen an einem Ende der Logik oder der anderen: "9 < = var1 und var1 < 10".
  3. Ihre Goto-Schleife machte mir Kopfschmerzen. es sei denn, Sie tun etwas Einfaches wie das Erstellen einer Endlosschleife, indem Sie von der Unterseite Ihres Programms nach oben springen, sollten Sie normalerweise die goto-Anweisung vollständig vermeiden. Eine while-Schleife ist die bessere Wahl für den Typ des von Ihnen ausgeführten Eingabeschutzes. Hier

ist eine korrigierte Version des Codes:

answer = 2 
While answer <> 1 'Input Protection 
TextWindow.WriteLine("Do you want to bet? yes(1) or no(2).") 
answer = TextWindow.ReadNumber() 
EndWhile 

TextWindow.WriteLine("Ok lets go.") 
points = 100 
var1 = Math.GetRandomNumber(10) 
If 5 <= var1 And var1 < 9 Then 
    points = points + 100 
ElseIf 9 = var1 or var1 = 10 then 
    points = points + 200 
Elseif 1 <= var1 and var1 < 5 then 
    points = points - 100 
EndIf 

TextWindow.WriteLine("You rolled " + var1 + ". You now have " + points + " points.") 
Verwandte Themen