1

これが私のコードです。while ループを学習していますが、なぜこれが機能しないのかわかりません。エラーが発生します。

i = 0
numbers = []
def while_var(x)
  while i < #{x}
  print "Entry #{i}: i is now #{i}."
  numbers.push(i)
  puts "The numbers array is now #{numbers}."
  i = i + 1
  puts "variable i just increased by 1. It is now #{i}."
 end

while_var(6)
 puts "Want to see all the entries of the numbers array individually (i.e. not in array format)? Here you go!"

for num in numbers
  puts num
 end

puts "1337"

これは私のエラーです

1.rb:5: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
  print "Entry #{i}: i is now #{i}."
         ^

私はこれが何であるか分かりません。ありがとう。

編集

だから私はこの改訂されたコードを持っています

def while_var(x)

  i = 0
  numbers = []

  while i < x
    print "Entry #{i}: i is now #{i}."
    numbers.push(i)
    puts "The numbers array is now #{numbers}."
    i = i + 1
    puts "variable i just increased by 1. It is now #{i}."
  end

  puts "next part"

  for num in numbers
    puts num
  end

end


while_var(6)

irbに1行ずつ入力すると機能しますが、rubyでファイルを実行すると機能しません。何を与える?次のエラーが表示されます。

Entry 0: i is now 0.1.rb:8:in `while_var': undefined method `push' for nil:NilClass (NoMethodError)
    from 1.rb:23:in `<main>'

編集:それを理解しました。なんらかの理由で「print」を「puts」に変更するだけで済みました。

4

2 に答える 2

2

このコードは動作するはずです:

def while_var(x)
  i  = 0
  numbers = []

  while i < x
    puts "Entry #{i}: i is now #{i}."

    numbers.push(i)
    puts "The numbers array is now #{numbers}."

    i = i + 1
    puts "variable i just increased by 1. It is now #{i}."
  end

  numbers
end

numbers = while_var(6)
puts "Want to see all the entries of the numbers array individually (i.e. not in array format)? Here you go!"

for num in numbers
  puts num
end

それがあなたが達成したかったことを願っています。

puts何かをコンソールに出力するために使用する必要があります。そして、変数をメソッドに移動inumbersますwhile_var

于 2013-10-02T07:43:55.007 に答える
2

固定コードは次のとおりです。

def while_var(x)
  i = 0
  numbers = []
  while i < x
    print "Entry #{i}: i is now #{i}."
    numbers.push(i)
    puts "The numbers array is now #{numbers}."
    i = i + 1
    puts "variable i just increased by 1. It is now #{i}."
  end
end

あなたはいくつかの間違いをしました:

  • whileループを閉じるのを忘れました。
  • 補間に正しくない構文を使用#{x}しましたが、ここでは補間は必要ありません。×だけにする。
  • メソッド内には 2 つのローカル変数がiありnumbers、最上位で作成されているため使用できません。したがって、これらの変数をメソッド内でローカルに作成する必要があります。
于 2013-10-02T07:30:07.453 に答える