2017-10-29 1 views
-2

이 질문 피보나치 패턴으로 떨어지거나 있는지 확인하는 방법 : 입력으로 주어진 문자열이 단어의 길이가하는 피보나치 패턴 여부에 빠지게 여부를 즉, 확인하기 위해 단어의를 길이는 두 단어 길이의 합입니다.단어의 문자열을하지

단어는 문자로만 구성됩니다. 예 : ra! hul은!로 구분 된 2 단어입니다.

입력은 여러 단어를 가질 수 있습니다. 모든 입력에는 적어도 3 단어가 있어야합니다. 예 I AM, RON!! 들어 이있는 패턴 (I, AM, RON)를 다음된다 Is IT HERs!E (Is, IT, HERs, E)이없는, 네번째 요소 경우 같아야 길이 6

출력이 정상적으로 않지만 모든 입력 된 단어가 피보나치 패턴으로 떨어지면 모든 단어를 확인한 후 마지막으로 YES을 출력해야합니다. 입력의 어느 부분에서도 피보나치 패턴에 해당하지 않으면 나중에 실행을 끝내지 않고도 NO을 출력해야합니다.

내 문제 : 내 문제는 : 코드를 작성했는데, 그것은 지속적으로 NO로 출력됩니다. 더 나은 방법은 너무 환영합니다. 내 코드는 다음과 같습니다.

public class Holla { 
     static int j=-1,a,b,c; 
     public static void main(String[] args) { 
       Scanner s = new Scanner(System.in); 
      String h=s.nextLine(); 
      int i=0,x=0; 
      while(i<h.length()) 
      { 
       if(Character.isLetter(h.charAt(i))) 
        x++; 
       else 
       { 
        while(x>0) 
       out: { 
         j++; 
         switch (j) 
         { 
          case 0: 
           a=x; 
           break; 
          case 1: 
           b=x; 
           break; 
          default: 
           c=x; 
         } 
         if((j==0)||(j==1)) 
           break out; 
          if (c==(a+b)) 
           { 
            a=b; 
            b=c; 
            j=1; 
           } 
           else 
           { 
            System.out.println("NO"); 
            System.exit(0); 
           } 
        } 
        x=0; 
       } 
       i++; 
      } 
      System.out.println("YES"); 
     } 
    } 
+1

이 코드에서 수행 된 디버깅에 대한 증거가 없기 때문에 나는이 질문을 downvoted했습니다. 귀하의 질문을 편집하여 귀하의 디버깅이 밝혀낸 바를 알려주십시오. 또한 특정 코드 행에 관한 특정 질문을 보여주십시오. 참조 : [최소, 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve) 및 [소규모 프로그램을 디버깅하는 방법] (https://ericlippert.com/2014/03/05)/how-to-debug-small-programs /). –

+1

_ "질문 ​​내용이 너무 어색하게 느껴졌 기 때문에 가능한 경우 편집하고 최대한 간결하게 만들 수 있기를 바랍니다."_ 정말로 질문을 작성하고 자신의 질문을 개선하도록 요청 했습니까? – NickL

+1

문제를 더 명확하게 설명하는 것은 디버깅과 동일하지 않습니다. 5 줄을 넘지 않는 코드를 지적하고 그 다섯 줄이 왜 기대 한대로 작동하지 않는지 설명 할 수 있어야합니다. 네가 그렇게 할 때까지 나는 내 downvote를 제거하지 않을 것이다. –

답변

1

Java 표준 라이브러리를 더 많이 사용할 수 있습니다.

먼저 입력란이 String input 인 것으로 가정 해 보겠습니다. 는 실행 시간, 그래서

String pattern = "^[a-zA-Z]"; 
String tokens[] = input.split(pattern); 
Predicate<String> filterNonEmpty = a -> !a.isEmpty(); 
List<String> words = 
    Arrays.asList(tokens).stream().filter(filterNonEmpty).collect(Collectors.toList()); 

좋아, 지금 우리는 말씀이 있습니다

이의이 요소 단어의 목록으로 분할하자, 인생을 더 쉽게하기 위해, 각각 일반 편지와는 다른 뭔가로 구분 "피보나치 검사기"(즉, 길이가 이전의 두 사람의 길이의 합과 같다면 우리는 모든 단어를 확인) : BTW

if (words.size() < 3) { .... } // handle edge case specified in question 

// grab lengths of first & second word 
int len1 = words.get(0).length(); 
int len2 = words.get(1).length(); 

// now iterate over remaining words 
for (int i = 2; i < words.size; ++i) { 
    String newWord = words.get(i); 
    int newLen = newWord.length(); 
    if (newLen != len1 + len2) { 
     // word at index [i] does not have "Fibonacci size" 
     return false; 
    } else { 
     // everything good, we need to move the lengths 
     len1 = len2; 
     len2 = newLen; 
    } 
} 
// all the words had "Fibonacci size" 
return true; 

. 코드 길이가 1, 3, 4, 7, 11 인 단어의 경우이 코드는 true을 반환합니다 (시작 요소는 0 & 1/1 & 1이 아니므로 피보나치 시퀀스가 ​​아닙니다).