0

私はRubyまたはプログラミングに比較的慣れていないので、ここのロジックで「noob2」の間違いを犯している場合はご容赦ください.

Chunky_PNG.

出力は正しいですが、最初の行のみが表示され、外側のループが 1 回だけ実行されるように見えます。

論理的な誤りがありますか、それとも while ループ内の while ループが機能しませんか? そうするのは悪い習慣かもしれないと想像できますが、それでも想定どおりにならない理由を知りたいです。

require 'chunky_png'
image = ChunkyPNG::Image.from_file('test.png')

#vars
$width0 = 0
$widthmax = image.dimension.width.to_i
$height0 = 0
$heightmax = image.dimension.height.to_i

#main
while $height0 < $heightmax  do
    while $width0 < $widthmax do 
        puts image[$width0,$height0].to_s(2)[0..7] + " " + image[0,0].to_s(2)[8..15] + " " + image[0,0].to_s(2)[16..23] + " " + $height0.to_s + "," + $width0.to_s
        $width0 += 1
    end
    width0 = 0
    $height0 += 1
end
4

2 に答える 2

2

あなたは欠けています$

あなたが持っている

width0 = 0

しかし、あなたはしたいです

$width0 = 0

これには、$width0 をゼロにリセットしないという効果があるため、最初の行のみが出力されます。$width0最初のループの後のすべての反復でまだ最大値であるため、内側のループを再度実行する必要はないと考えています。

(他の人が指摘しているように、おそらくグローバルは最良のアイデアではないことも付け加えておく必要がありますが、スクリプトが最初の行のみを出力する理由を尋ねました.:))

于 2013-05-05T20:02:57.500 に答える
0

Ray Toal が説明したように、エラーは $ 記号の欠落です

さらに使いやすい

each

ループ用。その後、ループインデックスを自分で処理する必要はありません

($height0..$heightmax).each do |height|
  ($width0..$widthmax).each do |width|
    puts image[width,height].to_s(2)[0..7] + " " + image[0,0].to_s(2)[8..15] + " " + image[0,0].to_s(2)[16..23] + " " + height.to_s + "," + width.to_s
  end
end
于 2013-05-05T23:01:44.213 に答える