Ruby会跳过一部分脚本

时间:2014-09-05 14:08:54

标签: ruby heap infinite-loop greedy

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是一个早先的方法,当我让它运行时,它给了我一个无限循环,其中所有值应该从文本文件中读入为零。

在puts循环中的puts行和check声明行用于调试目的,当然它们永远不会打印出来。

注释掉,当我运行程序时,它只打印出最后一行,好像直到循环从未运行。如果需要更多上下文代码,请告诉我,我会提出来。

我的头发开始脱落,所以任何帮助都会受到赞赏!

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

1 个答案:

答案 0 :(得分:1)

这是一个疏忽:

until i=$totalNumber

这为我分配了一个号码;它总是如此。尝试

until i==$totalNumber
相关问题