2016-04-07 12 views
0

Bu yöntem yalnızca xox gibi küçük girişler için çalışır, ancak taco cat gibi daha karmaşık bir girdiyle çalışmaz. Bu kodu tekrar tekrar okudum ve sorunu çözemedim. Küçük bir hata olduğunu farzediyorum, çünkü buradaki kodu değiştirerek yaklaşımımı değiştirmeye çalıştım ve düzeltemedim.Özyinalı Palindrome Checker

import java.util.Scanner; 

public class Palindromes 
{ 
    static Scanner scan = new Scanner(System.in); 

    public static void main (String[] args) 
    { 
    System.out.println("Enter a string, human:"); 
    String s=scan.nextLine(); 

    if(palindrome(s)){ 
     System.out.print("This is a palindrome, I am amused Earthling."); 
    }else{ 
     System.out.print("Don't you know to speak only in palindromes to your alien Overlord?"); 
    } 
} 

public static boolean palindrome(String s){ 
    s.replace(" ",""); 

    if(s.length()<2){ 
     return true; 
    }else if(s.charAt(0)==s.charAt(s.length()-1)){ 
     return palindrome(s.substring(1,s.length()-2)); 
    }else{ 
     return false; 
    } 
} 

}

+1

Eğer kesme ayarı ve yönteme gezinmek için bir debugger kullanarak denediniz mi? –

+1

'Dize değişmez. 's = s.replace (" "," ");' – bcsb1001

cevap

3

İki şey düzeltmek için:

  1. kaldırdınız boşluklarla sonucu görmezden size sonuçlanan geri s için replace sonucunu atamak unuttum. Deneyin:

    s = s.replace(" ",""); 
    
  2. Sen bir off-by-tek hatası var özyinelemeli çağrısı geçirmek için alt dizeyi çekerken. ending index of substring is exclusive, böylece alt dizenin sonundan çok fazla karakter kırpıyorsunuz. Deneyin:

    return palindrome(s.substring(1,s.length()-1)); 
    
+0

Kesinlik için teşekkür ederiz. Kendi çalışmalarımda okul çalışmasına karşı çalışırken yaptığım hataların türleri bana inanılmaz geliyor, kodlama gerçekten detaylarda. Birisi Dizeleri ayarlamak için sebep olarak değişmez olduğunu söyledi. Bu durumda, dolaylı olarak daha iyi bildiğim için bu aptal bir hataydı. Ancak, neden böyle olduğunu bilmiyorum _explicitly_, birisi java bağlamında değişmezliği açıklayabilir. – unprosaic

+0

Bu durumda, "String" in içeriğini değiştiren gibi görünen yöntemler, "String" i değiştirmez, değiştirilmiş içerikle başka bir "String" yaratır ve döndürür. 'String' üzerinde hiçbir yöntem, çağrıldığı dizenin içeriğini değiştirmez; Bu tasarım gereğidir ve oldukça kasıtlıdır. – rgettman

İlgili konular