2016-09-19 5 views
1

おそらくちょうど別のnoob質問ですが、私はどこでも答えを見つけることができませんでした。 私は単純な数値比較アルゴリズムを書く必要があります。私は、数値が等しくない場合、出力が比較となるようにプログラムを書いた。「最大の数値はxで、最小の数値はy」。それらが等しい場合、プログラムはそうと言うでしょう。そして、ちょうど安全であること、そうでなければ(何らかの理由で数字を比較できない場合)、出力はエラーメッセージになります。 技術的には非常に簡単な作業でなければなりませんが、可能な結果を​​テストすることにしたときに、エラーが発生する可能性があるため、入力が両方の文字である場合、出力は等しいことがわかりました。最初の入力が数字で2番目の文字が出力されていない場合、残りのコードは完全に無視されます。最初の入力が文字で、2番目の数字が数字の場合、出力は文字が最小で、0の価値があるという比較結果です。簡単な比較プロンプラム(数字用)は文字を等しいと見なしますか?

私はちょうど初心者です。何が起こったのか、あるいは数値入力を比較するだけの方法を教えてもらえますか...事前に感謝!ここで

は(Rubyで)コードです:あなたの入力が文字のとき

puts "\nEnter two positive numbers:\n\nFirst:" 
num1 = $stdin.gets.chomp.to_f 
puts "\nSecond:" 
num2 = $stdin.gets.chomp.to_f 

if num1 != num2 
    if num1 > num2 
     biggest = num1 
     smallest = num2 
    elsif num1 < num2 
     biggest = num2 
     smallest = num1 

    puts "\nThe biggest number is #{biggest} and the smallest is #{smallest}" 

    end 
elsif num1 == num2 
    puts "\nThe numbers are equal." 

else 
    puts "\nError" 
end 
+0

までend線を移動:あなたはこの条件 '場合NUM1> num2のための出力を持っていません' – engineersmnky

答えて

1

その後、この問題が発生した:

"abc".to_f # => 0.0 

をだからあなたは明らかに真である

0.0 == 0.0 

を比較します。

これは、String#to_fと同様にString#to_i(ちょうど0を返す)の定義によるものです。

NUM1 = $ stdin.gets.chomp.to_f

これらの行はfloatに入力されたものを変換します

2

まず、関数の動作を説明します。誰かが整数を入力すると、1を1.0に変換するだけなので注意しないでください。しかし、文字は浮動小数点数に変換されると0.0を返します。したがって、上記の行は、文字の答えを0.0に変えます。

これは、数字と文字の間の比較を説明し、あなただけの正の数でテストを示している。@engineersmnkyはコメントで指摘したように、あなたは何も出力NUM1> NUM2を持っていない)

。出力を内側のif/elseifブロックの外側に移動します。

あなたはそれについてどうしますか?

あなたの入力はすべて文字列になるため、扱いにくくなります。一つの方法は、入力が正しく整数に変換できない場合整数スロー例外キャッチ、.to_fを除去し、begin/catch block内部Integer()に入力を渡すことであろう。

puts "\nEnter two positive numbers:\n\nFirst:" 
num1 = $stdin.gets.chomp 
puts "\nSecond:" 
num2 = $stdin.gets.chomp 

begin 
    num1 = Integer(num1) 
    num2 = Integer(num2) 
rescue ArgumentError 
    { error handling code for improper input } 
end 

{ comparison code } 

ユーザが文字を入力した場合に、 Integer()はArgumentErrorをスローします。このコードはキャッチしますが、好きなように扱うことができます(エラーメッセージを出力し、整数を入力したり、終了したりするように促します。他の回答に加えて)

2

、私はputsはONLY NUM1 < num2のブロックであるので、それが表示されないことを次のよう...

if num1 != num2 
    if num1 > num2 
    biggest = num1 
    smallest = num2 
    elsif num1 < num2 
    biggest = num2 
    smallest = num1 
    puts "\nThe biggest number is #{biggest} and the smallest is #{smallest}" 
    end 

お知らせを指摘したいと思いますこの問題を解決するにはNUM1> num2の

、ただ注意点として

if num1 != num2 
    if num1 > num2 
    biggest = num1 
    smallest = num2 
    elsif num1 < num2 
    biggest = num2 
    smallest = num1 
    end 
    puts "\nThe biggest number is #{biggest} and the smallest is #{smallest}" 
end 
関連する問題