0

適切に実行されないプログラムで立ち往生しています。これが私のコードです:

puts '<Input greeting below>'
answer = gets.chomp
if answer == 'Hello' || 'Hi'
  answer == true
else 
  answer == false
  puts 'Hey, how are you?'
  answer2 = gets.chomp
  if answer2 == 'I\'m good' || 'I\'m doing well'
    answer2 == true
  else 
    answer2 == false
    puts 'That\'s good. Would you like to know facts about ruby programming?'
    answer3 = gets.chomp
    if answer3 == 'Sure'
      answer3 == true
    else 
      answer3 == false
      puts 'Ok, well did you know that {hello, world} was the first program ever made?'
      answer4 = gets.chomp
      if answer4 == 'Yes'
        answer4 == true
      else 
        answer4 == false
        puts 'Wow, you\'re pretty good! Would you like to know another fact?'
        answer5 = gets.chomp
        if answer5 == 'Sure'
          answer5 == true
        else answer5 == false
          puts 'Alright, did you know the programming language "Ruby" 
          was developed by a Japanese techonolgist named "Yukihiro Matsumoto"
          because he wasn\'t satisfied with the other programming languages?'
        end 
      end
    end 
  end
end

Windows CMD によると、29 行目の「終了」部分に問題があるとのことです。私はそれを理解することはできません。誰か助けてくれませんか?

4

1 に答える 1

3

ここには、動作するプログラムを入手する前に修正する必要がある多くの問題があります。

まず第一に、if x == A || Bあなたが思っていることを意味するものではありません。if x == (A || B)これは、2 番目の文字列ではなく、最初の文字列とのみ比較される場所に評価されます。複数の可能な一致に対してテストするには、次の方法を使用するのが最善の方法ですcase

case (answer)
when 'Hello', 'Hi'
  # Matches!
else
  # Not matched
end

句を追加していくつかの異なる条件をwhen分割することもできます。また、正規表現を使用して大文字と小文字の違いなどをキャッチすることもできます。

コメントに追加したように、このネストされたifパターンをなくす必要があります。代わりに状態システムに切り替える必要があります。

state = :greeting

loop do
  case (state)
  when :greeting
    puts "<input greeting below>"
    case (gets.chomp)
    when "Hello", "Hi"
      state = :how_are_you
    else
      break
    end
  when :how_are_you
    puts "Hey, how are you?"
    case (gets.chomp)
    when "I'm good", "I'm doing well"
      state = :thats_good
    else
      break
    end
  # ... Additional `when` clauses.
  end
end
于 2013-05-19T22:18:55.723 に答える