2011-11-16 120 views
3

我想通过让程序工作来理解嵌套循环。如果可能的话,我想使用循环的“每个做法”。现在循环执行所有的第一个循环,然后第二个......等等......我想要做的是,执行第一个循环1次,然后一次下降到第二个循环......等等。这里是我的代码(粘贴以下)Ruby嵌套每个循环

期望输出会是这样的:

index      3.0     3.0 
+-------------------------------------------------------+ 
0       -23.4    -23.4 
1      -2226.74    -2226.74 
2     -1.93464e+07   -1.93464e+07 

代码

class LogisticsFunction 
    puts "Enter two numbers, both between 0 and 1 (example: .25 .55)." 
    puts "After entering the two numbers tell us how many times you" 
    puts "want the program to iterate the values (example: 1)." 

    puts "Please enter the first number: " 
    num1 = gets.chomp 

    puts "Enter your second number: " 
    num2 = gets.chomp 

    puts "Enter the number of times you want the program to iterate: " 
    iter = gets.chomp 

    print "index".rjust(1) 
    print num1.rjust(20) 
    puts num2.rjust(30) 
    puts "+-------------------------------------------------------+" 

    (1..iter.to_i).each do |i| 
    print i 
    end 
    (1..iter.to_i).each do |i| 
     num1 = (3.9) * num1.to_f * (1-num1.to_f) 
     print num1 
    end 
     (1..iter.to_i).each do |i| 
     num2 = (3.9) * num2.to_f * (1-num2.to_f) 
      print num2 
     end 
end 
+0

你只希望这在给定的方式显示? –

回答

4

我觉得你不必有三个循环中运行,下面将给愿望输出

(1..iter.to_i).each do |i| 
    print i 
    num1 = (3.9) * num1.to_f * (1-num1.to_f) 
    print num1.to_s.rjust(20) 
    num2 = (3.9) * num2.to_f * (1-num2.to_f) 
    print num2.to_s.rjust(30) 
end 
+0

运行此代码:http://www.pastie.org/2871457给我这个错误,1logistics_functionz.rb:23:在'在中的块:未定义的方法'rjust'为-23.4:Float(NoMethodError ) \t从logistics_functionz.rb:20:在'每个 ' \t从logistics_functionz.rb:20:在'<类:LogisticsFunction>' 从logistics_functionz.rb \t:1:在'

“ – jimmyc3po

+0

改变了代码,需要将字符串中的num1和num2转换为使用rjust方法。现在试试 –

+0

酷!这正是*我正在尝试做的,也是编码风格。非常感谢您的帮助,非常感谢!我也学到了一些东西。 :) – jimmyc3po

1

难道不这样的事情解决问题了吗?

(1..iter.to_i).each do |i| 
    num1 = (3.9) * num1.to_f * (1-num1.to_f) 
    print num1 
    num2 = (3.9) * num2.to_f * (1-num2.to_f) 
    print num2 
end 

从我能看到你甚至不使用i变量。所以从理论上讲,你可以只是做

iter.to_i.times do 
    # stuff 
end 
3

您的循环实际上并没有嵌套。它们实际上是一个接一个的。这就是为什么他们一个接一个地运行。要嵌套它们 - 你必须把它们放在彼此之内。例如:

没有嵌套

(1..iter.to_i).each do |i| 
    # stuff for loop 1 is done here 
end # this closes the first loop - the entire first loop will run now 

(1..iter.to_i).each do |j| 
    # stuff for loop 2 is done here 
end # this closes the second loop - the entire second loop will run now 

嵌套:

(1..iter.to_i).each do |i| 
    # stuff for loop 1 is done here 
    (1..iter.to_i) .each do |j| 
    # stuff for loop 2 is done here 
    end # this closes the second loop - the second loop will run again now 
    # it will run each time the first loop is run 
end # this closes the first loop - it will run i times 
+1

这也有帮助。谢谢。 – jimmyc3po