2011-09-20 28 views
1
def getPrime(testNumber) 
    temp1=testNumber -1; 
    bIsPrime = false; 
    while (temp1 > 1) do 
     bIsPrime = ((testNumber % temp1) == 0) 
     puts("Check 1 #{((testNumber % temp1) == 0)}, temp1=#{temp1} "); 
     if ($bIsPrime) 
      break; 
     else 
      temp1 = temp1-1; 
     end 
    end 
    return bIsPrime 
end 

puts("Enter any number to know if it's Prime or not"); 

testNumber = gets() 

returnVal = getPrime(Integer(testNumber)); 

puts("Is enternered number Pime? #{return}"); 

我刚刚开始使用Ruby ...所以首先尝试编写一个素数编程。意外回报(本地跳转错误)

这件事情是给错误“意外的返回”

任何帮助将是巨大的。谢谢。

+2

欢迎堆栈溢出。请记住,注意您找到有用的答案。并确保“检查”最能回答您的问题的答案。 –

+0

你可能想看看Ruby建在Prime图书馆。 – ErsatzRyan

回答

0

虽然你已经拥有你的答案我认为这将有助于在这里放下这个,它遵循您使用的代码相同的想法:

def is_prime?(test_number) 
    (2..test_number-1).reverse_each do |i| 
     divisible = (test_number % i == 0) 
     puts "Check ##{test_number-i}, divisible=#{divisible}, temp=#{i}" 
     return false if divisible 
    end 
    return true 
end 
puts "Enter any number to know if it's prime or not" 
test_number = gets.chomp.to_i 
puts "Is entered number prime? #{is_prime?(test_number)}" 
+0

谢谢drep :)我一直在寻找你的答案..但我还有其他的疑问,以及你的答案... 1.“is_prime?”添加一个?函数名称有什么区别之后? 2.什么是##的用法?非常感谢您的回复:) –

+0

(1)使用?最后在结果中没有任何影响,你可以阅读更多关于这个(和bang(!)方法): http://rubylearning.com/satishtalim/writing_own_ruby_methods.html(2)第一个#是只是一个正常的字符串,所以它显示检查#1 ...检查#2。最后一件事,虽然我很欣赏你选择我的回复,但我的回答并不是真正的答案,而是一个补充,所以你可以看到如何以更像ruby的方式编写代码,应该选择Adam或Larry的。如果你可以改变它,否则请记住下次,并高兴我可以帮助:) – derp

3

return被保留。您不能将其用作变量名称,否则不能返回。

我相信你的意思puts("Is entered number prime? #{!returnVal}");

+0

是的。对不起,我的意思是“$ {!returnVal}” –

2

不检查这个答案,亚当是第一次。但这里的更多信息

正如亚当在他回答说,问题是,你说的

puts("Is enternered number Pime? #{return}"); 

发生了什么

红宝石评估无论是#{ foo }构造内 - 如果它是插入字符串中,如

puts "1 + 1 = #{1+1}" == >>将打印1 + 1 = 2

然后将结果值转换(强制)为字符串。

就你而言,你告诉ruby评估return声明,在上下文中没有任何意义。因此有点奇怪的错误信息。