Возьми номер в очередь в супермаркете - PullRequest
0 голосов
/ 05 октября 2018

Предполагая, что мы находимся в супермаркете, куда каждый раз, когда люди заходят, они берут номер в очередь.Мне нужно:

  • Увеличить счетчик на 1 для каждого человека, который берет число,
  • Поместить счетчик в массив, чтобы представить человека, который только что вошел (чтобы дать им знатькакова их позиция в очереди),
  • Возвращает общее количество людей, пришедших в тот день до момента вызова метода.

Это мой код:

def take_a_number(array)
  counter = 0
  counter += 1
  array << counter
  counter
end

Каждый раз, когда я вызываю этот метод, он сбрасывает счетчик на ноль.Как я мог избежать этого и сохранить общее количество людей?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вероятно, было бы лучше сохранить это в переменной экземпляра класса.Но не имея больше контекста, но в основном у вас есть ваша информация в массиве, вы должны посмотреть, какой последний счетчик был установлен:

def take_a_number(array)
  if array.empty?
    counter = 1
  else
    counter = array.last + 1
  end
  array << counter
  counter
end

Вы можете сократить этот оператор до этого:

 def take_a_number(array)
   counter = array.empty? ? 1 : array.last + 1
   array << counter
   counter
 end

Другим способом было бы просто посмотреть на длину массива:

 def take_a_number(array)
   counter = array.length + 1 
   array << counter
   counter
 end

Или вы можете даже написать это короче:

def take_a_number(array)
  array << array.length+1
  array.length
end

Но, как я сказал наДля начала было бы лучше упаковать все это вместе в модель, тогда вы можете использовать переменные экземпляра

class Queue
  def initialize
    @list = []
    @current_number = 0
  end

  def take_a_number
    @current_number += 1
    @list << @current_number
    @current_number
  end

  def take_turn
    @list.shift
  end
end

waiting_line_1 = Queue.new    #get a new queue, you could have multiple ones...

waiting_line_1.take_a_number  #first person takes a number
waiting_line_1.take_a_number  #second person takes a number

waiting_line_1.take_turn      #first person takes a turn / is called
0 голосов
/ 05 октября 2018

Вы должны объявить counter как 0 вне определения метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...