2017-08-01 181 views
1

我正在寫一個簡短的程序,要求用戶輸入汽車模型,製造商和年份輸入,並通過算法傳遞該輸入。我的問題是,是否有方法在通過公式將多個打印輸出標記爲每個輸出的編號後標註多個打印輸出?我需要爲每個循環使用一個嗎?我只是想了解我將如何完成這一任務。例如Ruby標籤打印輸出

例如打印輸出看起來像這樣。

class Car 
    attr_reader :make, :model, :year 
    def initialize 
    end 

    def set_make(make) 
     @make = make 
    end 

    def set_model(model) 
     @model = model 
    end 

    def set_year(year) 
     @year = year 
    end 

    def get_make 
     @make 
    end 

    def get_year 
     @year 
    end 

    def get_model 
     @model 
    end 
end 


array_of_cars = Array.new 

print "How many cars do you want to create? " 
    num_cars = gets.to_i 

for i in 1..num_cars 
    puts 
    print "Enter make for car #{i}: " 
    make = gets.chomp 

    print "Enter model for car #{i}: " 
    model = gets.chomp 

    print "Enter year of car #{i}: " 
    year = gets.to_i 

    c = Car.new 

    c.set_make(make) 
    c.set_model(model) 
    c.set_year(year) 

    array_of_cars << c 
end 

puts 
puts "You have the following cars: " 
puts 
for car in array_of_cars 
    puts "#{car.get_year} #{car.get_make} #{car.get_model}" 
end 
puts 
  1. 2014福特Expedition
  2. 2017年豐田86
  3. 2017年阿斯頓·馬丁DB11

是有辦法的號碼添加到輸出?

回答

2

而不是使用for循環中,您可以嘗試使用each_with_index,這將使你得到array_of_cars也是每個元素的索引中的每一個元素,在這種情況下,加1到當前索引會給你從開始值1:

array_of_cars.each_with_index do |car, index| 
    puts "#{index + 1}. #{car.get_year} #{car.get_make} #{car.get_model}" 
end 

或者你可以使用eachwith_index傳遞的第一要素,在這種情況下,1作爲參數:

array_of_cars.each.with_index(1) do |car, index| 
    puts "#{index}. #{car.get_year} #{car.get_make} #{car.get_model}" 
end 
+0

謝謝你向我展示如何得到它! –

+0

不用客氣,也可以參考1..num_cars部分的''我也可以看看[Ruby#Enumerator](https://ruby-doc.org/core-2.2.0/ Enumerator.html)。 –

0

你不」需要這麼多方法。使用attr_accessor來設置獲取者和設置者,並更好地利用initialize。然後使用tadman的這個answer的基本思想,我們可以將新創建​​的對象收集到類中的一個數組中。總之,我們可以壓縮你的類:

class Car 
    attr_accessor :make, :model, :year 

    def self.all 
    @all ||= [] 
    end 

    def initialize(make, model, year) 
    @make = make 
    @model = model 
    @year = year 
    Car.all << self 
    end 

end 

我們可以使用times運行一段代碼n倍。

puts "How many cars do you want to create? " 
n = gets.to_i 

n.times.with_index(1) { |_,i| 
    puts "Enter make for car #{i}" 
    make = gets.chomp 

    puts "Enter model for car #{i}: " 
    model = gets.chomp 

    puts "Enter year of car #{i}: " 
    year = gets.to_i 
    puts 
    Car.new(make, model, year) 
} 

然後塞巴斯蒂安帕爾馬已經提出,用each.with_index(1)打印您的汽車。使用for循環用Ruby 2.使用putsprint 1.忌:1。

Car.all.each.with_index(1) { |c, i| puts "#{i}. #{c.year} #{c.make} #{c.make}" } 

圖片的標題說明偏移指數的參數。