Ruby вложил каждый цикл do - PullRequest
3 голосов
/ 16 ноября 2011

Я пытаюсь понять вложенные циклы, заставляя эту программу работать. Я хотел бы использовать цикл «каждый поступок», если это возможно. Прямо сейчас цикл выполняет весь 1-й цикл, затем 2-й ... и т. Д. Я хотел бы сделать, 1-й цикл выполнить 1 раз, затем один раз упасть до 2-го цикла ... и т. Д. Вот мой код (вставлен ниже)

Желаемый вывод будет примерно таким:

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

Ответы [ 3 ]

4 голосов
/ 16 ноября 2011

Я думаю, вам не нужно работать с тремя циклами, следование даст желаемое значение

(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
4 голосов
/ 16 ноября 2011

Ваши циклы на самом деле не являются вложенными. Они на самом деле один за другим. Вот почему они бегут один за другим. Чтобы вложить их - вы должны поместить их друг в друга. например:

Не вложено

(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 голос
/ 16 ноября 2011

Разве что-то подобное не решит вашу проблему?

(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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...