On 5/21/07, Hakusa / gmail.com <Hakusa / gmail.com> wrote:
> I have some good experience in other languages and consider myself a
> good programmer, but some of the good techniques I've picked up don't
> seem to work here. Here are two examples.
>
> x=aNum
> y=0
> x.times do
>     (y+1).times do
>         Stuff
>     end
> end
>

That's not how times works,

a_num.times do |x|
   p x
end


> y never actually increments. Why? (No pun intended.) y should go up
> one x times by the end. Instead it stays at zero. And it's kind of
> troubling that is does the loop once even when y is zero; or is that
> just because it's a 'do' loop and not a 'for' loop?
You said do the following y + 1 times.
y is zero, y + 1 is 1. therefore, execute the following block of code, once.

Other methods you may be interested in are:

0.upto(10) do |y|
   p y
end

or

0.step(5, 1) do |y|
   p y
end

>
>
> And I've learned that to do the gets thing, I have to have
> STDOUT.flush before it. It seems that no matter what I do, if it's
> even two lines above the gets, I get the gets at the start of the
> program even though it was towards the end. Why? If it is such a
> common thing, why is STDOUT.flush not automatically called by the
> language?
>
>
> Although as much as this all complexes me, I am very glad to be able
> to do this with guilty glee:
>
> STDOUT.flush
> puts 'Hello ' + gets.chomp
>
Look what you've written:

puts( 'Hello'  + gets.chomp )

That means it must ask the user for input before it can create the
string to print.
> Although I have a feeling I'll rarely get to use this trick.
>
>
>

I would suggest you look into a ruby tutorial or book such as
Programming Ruby 2nd Ed. or Chris Pine's Learn to Program.