Mein Code sagt Ihnen, ob Ihre geschätzte Zahl höher oder niedriger als eine zufällig generierte Zahl ist, aber es scheint nur die ersten Ziffern der Zahl zu vergleichen, wenn eine von ihnen unter 10 liegt.
%Vor% Wenn beispielsweise $GeneratedNum = 56
und $Input = 7
zurückgegeben werden, wird "Too High"
Dies liegt daran, dass Sie eine Zeichenfolge mit einer Ganzzahl vergleichen. Die Reihenfolge ist wichtig.
%Vor%Ist eigentlich das Gleiche wie:
%Vor%Alternativ:
%Vor%würde Ihnen das korrekte Ergebnis geben. PowerShell versucht, das rechte Argument zum Typ der linken Seite zu zwingen.
Sie könnten eine explizite Umwandlung versuchen:
%Vor% Das Problem kommt von der Tatsache, dass Read-Host
eine Zeichenkette zurückgibt, also mit Ihrer Besetzung $Input
ist ein ArrayListEnumeratorSimple
try:
Sie sollten auch try{}catch{}
verwenden, um den Fall zu erfassen, dass die Eingabe kein int ist.
Sie müssen wissen, dass bei Verwendung von PowerShell-Vergleichsoperatoren der Typ des linken Teils ausgewählt wird, sodass der rechte Teil in den linken Typ gegossen wird. Wissend, dass Sie folgendes schreiben könnten, wo ich einfach die $GeneratedNum
, die eine ganze Zahl ist, links von den Vergleichen setzen:
Verwenden Sie niemals eine Variable mit dem gleichen Namen wie eine automatische Variable: $input
ist eine automatische Variable.
Siehe diesen Code, wo ich den vom Host gelesenen Wert pipete (und nicht die Variable $input
verwende):
Wichtig zu beachten, dass mein Code korrekt falsche Eingaben behandelt (nicht numerische Zeichen) wie w
oder ähnliche Strings ( qwerty
), die andere Vorschläge zum Scheitern bringen.
Ich nutze die Tatsache, dass Sie Ganzzahlen immer größer als 0 generieren.
Tags und Links comparison powershell operators