2014-09-05 60 views
0

Ruby noob在这里,我有一个真气问题。红宝石跳过一段脚本

我的脚本中的某些东西正在让Ruby跳过它的一部分。

#Main_block_begins_here 
if __FILE__ == $0 
    #Open_the_file_with_values_and_weights      
    File.open(getFileName, 'r') do |f| 
    #Intial_data... 
    $totalNumber=f.gets.chomp!.to_i 
    $totalCapacity=f.gets.chomp!.to_i 
    $currentItemWeight=0 
    $currentItemValue=0 
    $spaceLeft=0 
    $spaceLeft=$totalCapacity 
    $takenWeight=0 
    $takenValue=0 

    #Make_a_heap_for_the_data 
    $prioQ = Heap.new do 
     #reads_values,_computes_them,_and_enqueues_them      
     until i==$totalNumber 
     total=0 
     value=f.gets.chomp!.to_i 
     weight=f.gets.chomp!.to_i 
     total=value/weight 
     puts "#{total}=t, #{value}=v, #{weight}=w. Correct?" 
     check=gets.chomp! 
     it=Obj.new(total, value, weight) do 
      prioQ.enqueue(it) 
     end 
     i+=1 
     end 
    end 

    #dequeueIt 

    puts "total weight taken was #{$takenWeight} and total value taken was #{$takenValue}." 
    end 
end 

的注释行#dequeueIt早在一个方法,当我让运行,它给了我原本应在从文本文件阅读零所有值的无限循环。

until行中的puts行和check声明行用于调试目的,当然它们从不打印出来。

注释掉了,当我运行程序时,它只是打印出最后一行,就好像直到循环没有运行。如果需要更多的上下文代码,请让我知道,我会加以解决。

我的头发开始掉落这个,所以任何帮助表示赞赏!

编辑::是的,它应该是我== $ totalnumber。我在我的代码中修复了它,但它仍然不执行该循环内的脚本。

+0

'我= $ totalNumber' - 不应该是'=='吗? – matt 2014-09-05 15:06:27

+0

是的,没错。仍然不能解决问题,虽然... – 2014-09-05 15:21:52

+2

你几乎肯定不希望你的变量以'$'开头。 '$'使变量全局变量,这最终会让你伤心。例如,'totalNumber'而不是'$ totalNumber'。 – 2014-09-05 15:22:22

回答

1

这是一个监督:

until i=$totalNumber 

此分配一个编号为i;它总是如此。尝试

until i==$totalNumber