2015-01-04 2 views
-1

Когда я пытаюсь запустить эту программу, возникает бесконечный цикл. Я не могу определить, находится ли проблема в основном методе или в рекурсивном методе.Рекурсия палиндрома - бесконечная петля

Вот рекурсивный метод.

public class RecursivePalindrome 
{ 
public boolean isPalindrome(String s) 
{ 
    if(s.length() <= 1) 
    { 
     return true; 
    } 
    else if(s.charAt(0) == s.charAt(s.length() - 1)) 
    { 
     return isPalindrome(s.substring(1,s.length() - 1)); 
    } 
    else 
    { 
     return false; 
    } 
} 
} 

Вот основной метод.

public class RecursivePalindromeTester 
{ 
public static void main(String[] args) 
{ 
    Scanner in = new Scanner(System.in); 
    System.out.print("Enter a word or phrase. Type Q to quit: "); 
    String word = in.next(); 
    RecursivePalindrome object = new RecursivePalindrome(); 
    while(!word.equalsIgnoreCase("Q")) 
    { 
     if(object.isPalindrome(word)) 
     { 
      System.out.println(word + " is a palindrome"); 
     } 
     else 
     { 
      System.out.println(word + " is not a palindrome"); 
     } 
    } 
    System.out.print("Enter another word or phrase. Type Q to quit: "); 
    word = in.next(); 
} 
} 
+0

@lurker «endIndex» является эксклюзивным. – user2336315

ответ

3

Похоже, что вы никогда не сможете вырваться из цикла while в вашем основном методе.

Вы должны переместить эти две строки в вашем время цикла, так что пользователь может ввести что-то другое или типа «Q», чтобы выйти:

System.out.print("Enter another word or phrase. Type Q to quit: "); 
word = in.next(); 
+0

Это сработало хорошо. Спасибо за вашу помощь! –

+0

@ TommyLam-Примите этот ответ. –

+0

@TommyLam рад, что я мог бы помочь! –

0

Простое решение: Вы сделали} в неправильном месте (Вы просто забыли включить обновление переменной слова в цикл while). Так что только опечатка:

public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     System.out.print("Enter a word or phrase. Type Q to quit: "); 
     String word = in.next(); 
     RecursivePalindrom object = new RecursivePalindrom(); 
     while(!word.equalsIgnoreCase("Q")) 
     { 
      if(object.isPalindrome(word)) 
      { 
       System.out.println(word + " is a palindrome"); 
      } 
      else 
      { 
       System.out.println(word + " is not a palindrome"); 
      } 
     // } old postion of the brace 
     System.out.print("Enter another word or phrase. Type Q to quit: "); 
     word = in.next(); 
     } // new position of the brace 
    } 
+0

Это работало очень хорошо. Спасибо за вашу помощь! –

+0

Если это работает, пожалуйста, примите это: D – ProgrammingIsAwsome

0

Проблема в том, что вы получаете следующее слово со входа после основного цикла. Поэтому слово не меняется и петли навсегда.

+0

Это сработало хорошо. Спасибо за вашу помощь! –

1

Вы проблема заключается в этой линии здесь:

while(!word.equalsIgnoreCase("Q")) 
    { 
     if(object.isPalindrome(word)) 
     { 
      System.out.println(word + " is a palindrome"); 
     } 
     else 
     { 
      System.out.println(word + " is not a palindrome"); 
     } 
    } 
    System.out.print("Enter another word or phrase. Type Q to quit: "); //problem 
    word = in.next(); 

Вы runninging в то время цикла ни с чем, чтобы обновить его

Исправлено:

while(!word.equalsIgnoreCase("Q")) 
    { 
     if(object.isPalindrome(word)) 
     { 
      System.out.println(word + " is a palindrome"); 
     } 
     else 
     { 
      System.out.println(word + " is not a palindrome"); 
     } 
     System.out.print("Enter another word or phrase. Type Q to quit: "); 
     word = in.next(); 
    } 

Подобно тому, как предложение, посмотреть Соглашения о кодировании Java, например, {обычно оставляются в конце строки, а не сами по себе, основываясь на вашем коде несколько на условностях, облегчает другим людям читать

1

Это заманивать цикл бесконечен

while(!word.equalsIgnoreCase("Q")) 
    { 
     if(object.isPalindrome(word)) 
     { 
      System.out.println(word + " is a palindrome"); 
     } 
     else 
     { 
      System.out.println(word + " is not a palindrome"); 
     } 
    } 

в то время как петля держит цикл недо слово устанавливается в «Q», и что происходит за пределами цикла, поместите этот код:

System.out.print("Enter another word or phrase. Type Q to quit: "); 
    word = in.next(); 

На конец вашего цикла while

+0

Это сработало хорошо. Спасибо за вашу помощь! –

Смежные вопросы