2016-06-05 5 views
-1

Übernahme der CodeWar Challenge. Ich bemühe mich, meinen Code so zu fixieren, dass bei einer Länge der Eingabe von 0 die Zeichenfolge 0 anstelle von nil angezeigt wird.longest_palindrome, erwartete 0, bekam nil, wo sollte if-else Aussage?

-Code ist unten: (Vorschläge?)

def longest_palindrome(string) 
    i = 0 
    a = [] 
    while !string[i..-1].empty? 
    j = -1 
    while !string[i..j].empty? 
    s = string[i..j] 
    if s.reverse == s 
     a << s.length 

     if s.length == nil 
      a.max = 0 
      end 
    end 
    j -= 1 
    end 
    i += 1 
    end 
a.max 
end 

Antwort

1

Zuerst möchte ich ein paar Probleme mit dem Code hinzuweisen Sie auf dem Laufenden.

Der Körper des innersten if-Anweisung ist nie ausgeführt, weil

0 != nil 

Das bedeutet, dass selbst wenn s.length

s.length == nil 

noch falsch auf Null bewertet wird.

Ein weiteres Problem, das ich möchte darauf hinweisen, dass

a.max = 0 

wirft einen Fehler, der wie folgt aussieht:

nicht definierte Methode max=' for []:Array (repl):17:in longest_palindrome‘ (ers): 1: in `initialize '

Sie können den Maximalwert nicht direkt einstellen. Der Grund, warum Sie nie mit dem Code, den Sie gepostet haben, auf diesen Fehler stoßen, ist das erste Problem, das ich oben beschrieben habe.

Jetzt, um Ihre Frage zu beantworten. Es gibt viele Möglichkeiten, das zu tun, was du verlangst. Sie können zum Beispiel einfach prüfen, ob die Eingabezeichenfolge am Anfang des Codes leer ist, und sofort 0 zurückgeben, wenn es daher ist, die while-Schleifen nie auszuführen. Vielleicht mit etwas wie

return 0 if string.empty? 

am Anfang des Codes.

Aber aus Ihrer Frage, ich denke, was Sie suchen etwas mehr wie das ist folgende:

def longest_palindrome(string) 

    i = 0 
    a = [] 

    while !string[i..-1].empty? 
    j = -1 
    while !string[i..j].empty? 
    s = string[i..j] 
    if s.reverse == s 
     a << s.length 
    end 
    j -= 1 
    end 
    i += 1 
end 

    a.max.to_i 
end 

Von Interesse ist dabei die zweite letzte Zeile, die sicher ist umgewandelt a.max macht zu einer ganzen Zahl unter Verwendung der to_i Methode. Wenn Sie diese Methode auf null setzen, wird sie in 0 konvertiert. Bitte beachten Sie, dass ich den Code geändert habe, um die Probleme zu beheben, die ich zuvor hervorgehoben hatte.

Verwandte Themen