Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
im trying to get my code to loop (im very new to ruby)
I want to make the program loop when it doesnt.
I am told that my code is very wrong, but is there anyway I can get it to loop anyways?
class Screen
def clear
end
def pause
STDIN.gets
end
end
class Lottery
attr_accessor :greeting, :register, :morereg, :goodbye, :lotterynumbers, :randomtwenty
def initialize
end
def say_greeting
greeting = "\n\n\n\t\t ***Welcome to elGordo lottery!***\n\n" +
"\t\t Press Enter to continue.\n\n\n"
print greeting
end
def say_register
register = "Type in the lotterynumber you want to register and then press Enter.\n\n"
print register #nedenunder [#counter]
Lotterynumbers1 << gets.chomp.to_i
end
def say_morereg
morereg = "would you like to type in another lottery number? (y/n)\n"
print morereg
gets.chomp!
if gets.chomp! == "y" then
say_register
else
puts "\nThank you for the register.\n\n"
end
end
# def say_randomtwenty
# Lotterynumbers1 << << 20.times.map { rand(00000..99999).to_i }
# end
def say_goodbye
goodbye = "\nThank you for the register.\n\n"
print goodbye
end
end
#main Script Logic
Lotterynumbers1 = []
Console_Screen = Screen.new
Hej = Lottery.new #starter nyt Lotteri object
Hej.say_greeting
Console_Screen.pause
Hej.say_register
Hej.say_morereg
puts Lotterynumbers1
you got confused with conditional statement and looping thinking if user go on says yes(y), then it would be a kind of looping(executing the same procedure many times) by your code.
But its not
Related
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
In an instance, in a method, I loop through a list lines and manipulate each line. However, there are some lines which I want to skip. I'd like to define which lines to skip with some global variables at the top of the instance. Is that possible? How can I do that?
class Bets
#stuff
def make_prediction
lines.each do |line|
next if #league == :nba && line[:bet_type] == :total && line[:period] == :h1
next if [:total, :spread, :money_line].include?(line[:bet_type]) && line[:period] == :fg
#do stuff
end
end
end
EDIT:
someone voted for this topic to be closed as unhelpful cause it's unclear. I'm not sure what is unclear about it. But I'll make it more explicit how I want it to look...
class Bets
#psuedo code, obviously this wont work
#and i cant think how to make it work
#or if its even possible
GLOBAL = true if #league == :nba & line[:bet_type] == :total & line[:period] == :h1
#stuff
def make_prediction
lines.each do |line|
next if GLOBAL #psuedo code
#do stuff
end
end
end
What about using methods:
class Bets
def skip?
#league == :nba & line[:bet_type] == :total & line[:period] == :h1
end
#stuff
def make_prediction
lines.each do |line|
next if skip?
#do stuff
end
end
end
Global variables are largely frowned upon, so try to find a context where your test make sense.
Try creating a Proc and executing it in the instance's context
GLOBAL = Proc.new {|line| your_code_goes_here}
#...
#...
def make_prediction
lines.each do |line|
next if instance_exec(line,GLOBAL) #psuedo code
#do stuff
end
end
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
I have two files:
answer.rb
class Answer
def decision(string)
if string == 'Richard'
puts "Hello"
else
puts "I dont know you"
end
end
end
question.rb
require './answer'
class Question < Answer
puts "What is your name?"
response = gets.chomp
puts decision("#{response}")
end
How do I access the method in class Answer from class Question given the file is not enough? If I remove the the class Answer, then everything works.
To make your example work you need to call your code. For instance you can amend your Question class with the following code :
#question.rb
require './answer'
class Question < Answer
def ask
puts "What is your name?"
response = gets.chomp
puts decision(response)
end
end
Question.new.ask
The inheritance will be that your instance of question (i.e. Question.new) will be inherited from Answer => it will have both methods (in your case 'ask' and 'decision').
Just do
puts self.new.decision(response) # no need for string interpolation.
#decision is an instance method of Answer class, so it will be available as an instance method of the class Question. Now inside the class, self is set to the class itself, thus the bare method call like your, will throw error as no method found. Thus you have to create an instance of the class Answer or Question, and on that instance you have to call the method.
Complete code :
class Answer
def decision(string)
if string == 'Richard'
puts "Hello"
else
puts "I dont know you"
end
end
end
class Question < Answer
puts "What is your name?"
response = gets.chomp
puts self.new.decision(response)
end
Run the code:
(arup~>Ruby)$ ruby so.rb
What is your name?
arup
I dont know you
(arup~>Ruby)$
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
What am I doing wrong here? I'm trying to get sales tax and eventually use it for math calculations?
class Item
def initialize(type)
#type = type
def tax_calc(type)
if type.include?("book")
sales_tax = 0
else
sales_tax = 2
end
end
end
puts "what is type"
type2 = gets
Item.new(type2)
puts sales_tax
Your current code is missing an end and you have a nested method definition, which is a very advanced topic, and I don't see it used very often except as a toy.
This code will return the tax number.
class Item
def initialize(type)
#type = type
end
def tax_calc
if #type.include("book")
#sales_tax = 0
else
#sales_tax = 2
end
end
def sales_tax
tax_calc
end
end
puts "what is type"
type = gets
purchase = Item.new(type)
puts purchase.sales_tax
I changed type2 to simply type because there is no reason to worry about mirroring the local variable inside the class due to scope.
This code is far from being optimal, but it is at least 'working code'.
In your code,sales_tax is a local variable of the initialize method. It doesn't exist outside of that scope.
Here's one way to get the sales tax:
class Item
def initialize(type)
#sales_tax = type.include?('book') ? 0 : 2
end
def sales_tax
#sales_tax
end
end
item = Item.new('foo')
puts Item.new('foo').sales_tax
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
I'm new to ruby and I'am building a little program on ruby alone,the problem is that I'am trying to launch it without success
Imagine that i have this code
#usr/bin/ruby
Class Whatever
def get_user_input
#user_input = gets.chomp
user_doing(#user_input)
end
def user_doing
#something
end
end
What I want is to call the get_user_input method as soon as i feed my rb file to ruby
I tried to call it on a initialize method
def initialize
get_user_input
end
I also tried to define it as a "class method"
def get_user_input
#user_input = gets.chomp
user_doing(#user_input)
end
but neither of them seems to work as when I'm start the rb file the program doesn't expect my input so how can i do this?.
You just define a class. What you did not call the method. Just add Whatever.new.get_user_input to your file.
#usr/bin/ruby
class Whatever
def initialize(input)
#input = input
end
def self.get_user_input
whatever = new(gets.chomp)
whatever.user_doing
end
def user_doing
puts "Input was: #{#input}"
end
end
Whatever.get_user_input
Btw: Your user_doing does not take args in the moment. You may want to check that.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
Please help me implement class Repeat and it's methods:
class Repeat
def initialize(n)
#TODO
end
def each
#TODO
end
end
def n_times(n)
#TODO
end
This piece of code:
n_times(2) { |count| puts "You called me #{count} times" }
should return this result:
# You called me 1 times
# You called me 2 times
Welcome to StackOverflow. It seems like you are new to OOP and passing a block to a method in Ruby. This answer simplifies your question and just focuses on passing a block to a method. Here is some functioning code:
def n_times(n, &block)
n.times do |counter|
yield(counter + 1)
end
end
n_times(2) { |count| puts "You called me #{count} times" }