2016-06-05 2 views
-1

CodeWar 챌린지를 시작하십시오. 문자열 입력의 길이가 0이면 nil 대신 0을 표시하도록 내 코드를 고치려고합니다.longest_palindrome, expected 0, nil을 얻었습니다. if-else 문은 어디에 있습니까?

코드는 다음과 같습니다 : (제안?) 먼저

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 

답변

1

, 난 당신이 게시 된 코드와 문제의 몇 가지를 지적하고 싶습니다.

0 != nil 

이것은 s.length가 제로로 평가해도

s.length == nil 

여전히 거짓 것을 의미하기 때문에

가장 안쪽의 몸은 문은 실행되지 않습니다경우.

또 다른 문제는 내가 지적하고 싶은는

a.max = 0 

은 다음과 같습니다 오류가 발생하는 것입니다 :

정의되지 않은 메서드 max=' for []:Array (repl):17:in longest_palindrome ' (REPL) : 1 :에 `초기화 '

최대 값을 직접 설정할 수 없습니다. 게시 한 코드로이 오류가 발생하지 않는 이유는 위에서 설명한 첫 번째 문제 때문입니다.

질문에 대답 해주세요. 당신이 묻는 것을 할 수있는 많은 방법이 있습니다. 예를 들어, 입력 문자열이 코드 시작 부분에 빈 인지 여부를 확인할 수 있습니다. 따라서 while 루프를 전혀 실행하지 않으면 즉시 0을 반환합니다. 아마도 코드의 시작 부분에

return 0 if string.empty? 

과 같은 문자가있을 수 있습니다.

그러나 귀하의 질문에서

, 나는 당신이 찾고있는 것은 더 같은 생각 다음

여기에 관심의
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 

확실 a.max이 변환됩니다 만드는 두 번째 마지막 줄입니다 to_i 메소드를 사용하여 정수로 변환합니다. 이 메서드를 nil로 호출하면 0으로 변환됩니다. 또한 이전에 강조 표시된 문제를 해결하기 위해 코드가 변경되었습니다.