2017-07-12 16 views
0

作成したコードは2回しか繰り返されません。 "continue_question"メソッドの2回目の "y"を入力すると、コードは停止します。Ruby初心者:コードは2回繰り返します

def greeting 
    puts "Hello! Please type your name: " 
    name = gets.chomp.capitalize 

    puts "It is nice to meet you #{name}. I am a simple calculator application." 
    puts "I can add, subtract, multiply, and divide." 
end 

greeting 

def calculator 

    puts "First number: " 
    @n1 = gets.chomp.to_i 
    puts "Secons number: " 
    @n2 = gets.chomp.to_i 

def calculation 
    puts "Type 1 to add, 2 to subtract, 3 to multiply, or 4 to divide two numbers: " 
    operation_selection = gets.chomp.to_i 

    if operation_selection == 1 
     @result = @n1 + @n2 
    elsif operation_selection == 2 
     @result = @n1 - @n2 
    elsif operation_selection == 3 
     @result = @n1 * @n2 
    elsif operation_selection == 4 
     @result = @n1/@n2 
    else 
     puts "Something went wrong!" 
     calculation 
    end 
end 

calculation 

puts "Your Result is #{@result}" 
end 

calculator 

def continue_question 
puts "Do you want to continue? (y/n)" 
continue = gets.chomp.to_s 

if continue == "y" 
    calculator 
    elsif continue == "n" 
    puts "Bye!" 
else 
    puts "What?" 
    continue_question 
end 
end 

continue_question 

答えて

0

あなたのコードが2回繰り返さない、それは一度を繰り返します。

def continue_question 
    puts "Do you want to continue? (y/n)" 
    continue = gets.chomp.to_s 

    if continue == "y" 
    calculator # <-- This causes it it repeat ONCE! 
    elsif continue == "n" 
    puts "Bye!" 
    else 
    puts "What?" 
    continue_question 
    end 
end 

クイックフィックスは、自分自身を再帰的に繰り返すように、その行の下に再呼び出しcontinue_question方法にある:

あなたcontinue_question方法では、あなたがもう一度繰り返すようにそれを教えていないので、理由がある

def continue_question 
    puts "Do you want to continue? (y/n)" 
    continue = gets.chomp.to_s 

    if continue == "y" 
    calculator 
    continue_question # <-- Add this to repeat indefinitely 
    elsif continue == "n" 
    puts "Bye!" 
    else 
    puts "What?" 
    continue_question 
    end 
end 
+0

このように再帰的にメソッドを呼び出すのではなく、 'while'または' loop'を使うことも考えられます。しかし、それはおそらく元の質問の範囲を超えているより大きなリファクタです。 –

0

問題はcontinue_questionだけであなたのコードの末尾に、一度実行していますが、ユーザー出口(すなわちタイプn)までループする必要があるということです。

だから、単に例えば、continue_question内のループを追加します。

def continue_question 
    continue = "y" 

    until continue == "n" do 
    puts "Do you want to continue? (y/n)" 
    continue = gets.chomp.to_s 

    if continue == "y" 
     calculator 
    elsif continue == "n" 
     puts "Bye!" 
    else 
     puts "What?" 
    end 
    end 
end 
0

ちょっと私が作成したコードは2回しか繰り返されません。それでもcontinue_question関数を実行している、あなたは上記の関数を呼び出すときcalculator

if continue == "y" 
    calculator 
    elsif continue == "n" 
    puts "Bye!" 

は、私はあなたが以下の誤解だと思います。したがって、calculatorの実行が終了すると、continue_questionも終了し、プログラムは停止します。希望の結果を得るには、loopを試してみてください。

関連する問題