something wrong with case/when syntax

J

Jed Kowalski

hi,
Can You tell me please why this instruction doesn't want to work
properly?
It only repeats the:
puts "Buy drink: press 1"
puts "Print money report: press 2"
puts "Print drink report: press 3"
puts "Exit: press 0"
but nothing more

while q!=0
puts "What to do?"
puts "Buy drink: press 1"
puts "Print money report: press 2"
puts "Print drink report: press 3"
puts "Exit: press 0"

q = gets
puts q
puts q

case q

when 1:

for j in 0..2
drinks[j].namea()
puts ": "+drinks[j].pricea()+" press "+j
end
g = gets
if drinks[g].czyjest() then
y=1
s=0
while y!=0
puts "Cash: ",s," What to do: \n\t\t Insert cash: 0
\n\t\t Buy drink: 1 \n\t\t Cancel: 2"
puts "Choose: "
y = gets
if y==0 then
puts "Insert coins. "
m = gets
s+=m
p.add(m)
end
if y==1 && drinks[g].givechange(s)<0 then puts "No money, insert
coins"
else
puts "change: "
p.monety(drinks,s,g)
end
if y==2 then break end
end


else puts "No such drink."
end
when 2:
p.write()
break;
when 3:
puts "You bought: "
for i in 0..2
drinks.namea()
puts ": ", drinks.bought()
end
end
end
 
J

Justin Collins

Jed said:
hi,
Can You tell me please why this instruction doesn't want to work
properly?
It only repeats the:
puts "Buy drink: press 1"
puts "Print money report: press 2"
puts "Print drink report: press 3"
puts "Exit: press 0"
but nothing more

while q!=0
puts "What to do?"
puts "Buy drink: press 1"
puts "Print money report: press 2"
puts "Print drink report: press 3"
puts "Exit: press 0"

q = gets
puts q
puts q

case q

when 1:
<snip>

Kernel#gets returns a string. You are comparing the resulting value to
integers. Try using gets.strip.to_i instead.


-Justin
 
D

David A. Black

Hi --

hi,
Can You tell me please why this instruction doesn't want to work
properly?

q is a string, and you're comparing it with integers (0, 1, etc.).


David

--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
ADVANCING WITH RAILS July 21-24 Edison, NJ
See http://www.rubypal.com for details and updates!
 
J

Jed Kowalski

David said:
Hi --



q is a string, and you're comparing it with integers (0, 1, etc.).

David

THX!!!
and now, the last (i think) problem:
the change(x) method doesn't want to work, can You tell me why?

BTW can somebody check for other errors?

class Drink

attr_accessor :price,:ammount,:name,:bought

def initialize (cen, ile, nn)
$price=cen
$ammount=ile
$name=nn
$bought=0
end

def chage(x)
$ammount-=1
$bought+=1
return x - self.pricea
end
def ammounti() return $ammount end
def pricea() return $price end
def buy() return $bought end
def canbuy()
if $ammount==0 then
return false
else return true
end
end
def namea() puts $name end

end
class Automat

def initialize (pie, dwa, jed, piec, dwad, dzi)
$tab = [[pie,dwa, jed, piec, dwad, dzi],[5,2,1,0.5,0.2,0.1]]
puts $tab


end
def coins(n, s, g)
x=s-n[g].pricea
for i in 0.. 5
w=$tab[0]
for w in w..0
if (x-$tab[1])> -0.0001 then
$tab[0]=$tab[0]-1
x=x-$tab[1]
puts $tab[1]
end
end
end
end
def write()
puts "Coins 5zl: ", $tab[0][0]
puts "Coins 2zl: ", $tab[0][1]
puts "Coins 1zl: ", $tab[0][2]
puts "Coins 50gr: ", $tab[0][3]
puts "Coins 20gr: ", $tab[0][4]
puts "Coins 10gr: ", $tab[0][5]
end
def dodaj(x)
if x==5 then $tab[0][0]=$tab[0][0]+1 end
if x==2 then $tab[0][1]=$tab[0][1]+1 end
if x==1 then $tab[0][2]=$tab[0][2]+1 end
if x==0.5 then $tab[0][3]=$tab[0][3]+1 end
if x==0.2 then $tab[0][4]=$tab[0][4]+1 end
if x==0.1 then $tab[0][5]=$tab[0][5]+1 end
end
end



q=1
m=1
s=0
p = Automat.new(15,15,20,25,25,25)
drinks = [
Drink.new(1.7,0,"Coca-Cola"),
Drink.new(2,0,"Sprite"),
Drink.new(2.1,20,"Fanta") ]


while q!=0
puts "What do you want to do?"
puts "Buy Drink: 1"
puts "Coin report: 2"
puts "Drink report: 3"
puts "Exit: 0"

q = gets.strip.to_i
puts q
puts q

case q

when 1:

for j in 0..2
drinks[j].namea()
puts ": ",drinks[j].pricea()," press ",j
end
g = gets.strip.to_i
if drinks[g].canbuy() then
y=1
s=0
while y!=2
puts "Coins inserted: ",s," What to do: \n\t\t Input
coins: 0 \n\t\t Buy Drink: 1 \n\t\t Cancel: 2"
puts "Your choice: "
y = gets.strip.to_i
if y==0 then
puts "Input coins. "
m = gets.strip.to_f
s=s+m
p.dodaj(m)
end
if y==1 && drinks[g].chage(s)<0 then puts "No chash. Iput coins"
else
puts "reszta: "
p.coins(drinks,s,g)
end
#if y==2 then break end
end


else puts "No such Drinku."
end
when 2:
p.write()
when 3:
puts "You boughts: "
for i in 0..2
drinks.namea()
puts ": ", drinks.buy()
end
end
end
 
R

Robert Klemme

2008/6/10 Jed Kowalski said:
and now, the last (i think) problem:
the change(x) method doesn't want to work, can You tell me why?

BTW can somebody check for other errors?

class Drink

attr_accessor :price,:ammount,:name,:bought

def initialize (cen, ile, nn)
$price=cen
$ammount=ile
$name=nn
$bought=0
end

This gives me the creeps: you are modifying global variables like
instance variables. That's definitively a don't do.

Regards

robert
 
J

Jed Kowalski

Robert said:
This gives me the creeps: you are modifying global variables like
instance variables. That's definitively a don't do.

Regards

robert


thx, corrected
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Something is wrong 1
C++ 2 Ruby 12
Dont work, it´s something whit the loops? 1
Fibonacci 0
Blue J Ciphertext Program 2
syntax error, unexpected '}', expecting kEND 4
What am I doing wrong? 5
Python code problem 2

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,742
Latest member
AshliMayer

Latest Threads

Top