2016-08-02 14 views
0

Erstellen Sie die now_serving-Methode, die die nächste Person in Zeile aufrufen (d. H. Puts) und dann von vorne entfernen soll. Wenn niemand in der Schlange steht, sollte er sagen: "Es wartet niemand darauf, bedient zu werden!". Wenn ich versuche, die Shift-Methode zu verwenden, um das erste Element im Array loszuwerden. Ich habe am falschen Ausgang. Hier ist der Ruby-Code:FIFO-Ruby-Warteschlangenalgorithmus funktioniert nicht

def now_serving(array) 
 
    while array.length != 0 
 
    array.each do |name| 
 
     puts "Currently serving #{name}." 
 
     array.shift 
 
     end 
 
    end 
 
    puts "There is nobody waiting to be served!" 
 
end

Aber die Array.shift funktioniert nur einmal, wie bekomme ich es das erste Element eines Arrays kontinuierlich sinken. Hier ist der Code für die Rspec:

describe "#now_serving" do 
 
    context "there are no people in line" do 
 
     it "should say that the line is empty" do 
 
     expect($stdout).to receive(:puts).with("There is nobody waiting to be served!") 
 
     now_serving(katz_deli) 
 
     end 
 
    end 
 

 
    context "there are people in line" do 
 
     it "should serve the first person in line and remove them from the queue" do 
 
     expect($stdout).to receive(:puts).with("Currently serving Logan.") 
 
     now_serving(other_deli) 
 
     expect(other_deli).to eq(%w(Avi Spencer)) 
 
     end 
 
    end 
 
    end 
 

 
end

Antwort

0

Es ist eine schlechte Idee, ein Array in der gleichen Zeit, die Sie durchlaufen, es zu verschieben.

def now_serving(array) 
    while name = array.shift 
    puts "Currently serving #{name}." 
    end 

    puts "There is nobody waiting to be served!" 
end 
+0

ich die folgende Störung erhalte, wenn ich den Code ausführen. '' 'Failure/Fehler: now_serving (other_deli) # > erhalten: setzt mit unerwarteten Argumente erwartet: bekam: - @chumakoff –

+0

Was sind ("Derzeit Logan dienen.") ("Zur Zeit Avi dienen.") 'katz_deli' und' other_deli'? Woher kommen diese? – chumakoff

+0

Dies sind einige Tests von Rspec. @chumakoff –

0

So fixiert das ist mein Fehler

def now_serving(array) 
 
    queue = Queue.new 
 
    queue = array 
 
    
 
    if array.length > 0 
 
    puts "Currently serving #{array[0]}." 
 
    array.shift 
 
    else 
 
    puts "There is nobody waiting to be served!" 
 
    end 
 
end