2014-11-04 139 views
0

我试图找到一串数字的所有可能的解码的字符串的所有decodings,例如递归方法如下寻找数字

Input: {1, 2, 1} 
Output: ("aba", "au", "la") 
[3 interpretations: aba(1,2,1), au(1,21), la(12,1)] 

我的程序品脱“ABA”,然后给了我以下错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3 
at java.lang.String.charAt(String.java:686) 
at countDecoding.decodings(countDecoding.java:20) 
at countDecoding.decodings(countDecoding.java:17) 
at countDecoding.decodings(countDecoding.java:17) 
at countDecoding.main(countDecoding.java:37) 

line 20 is  if((str.charAt(n)<'2' && str.charAt(n+1)!='0') || (str.charAt(n)=='2' && str.charAt(n+1)<'6')){ 

and line 17 is   decodings(str,n=n+1,temp,len); 
下面

是我的代码

public class countDecoding { 
static void decodings(String str, int n,String temp,int len){ 

    if(n == len){ 
     System.out.println(temp); 
     return; 
    } 

    if(str.charAt(n)>='0'){ 
     char[] c = Character.toChars(96 + str.charAt(n)-'0'); 
     temp = temp +c[0]; 
     decodings(str,n=n+1,temp,len); 
    } 

    if((str.charAt(n)<'2' && str.charAt(n+1)!='0') || (str.charAt(n)=='2' && str.charAt(n+1)<'6')){ 

     String hold = ""; 
     hold+=str.charAt(n); 
     hold+=str.charAt(n+1); 
     char[] c = Character.toChars(96 + (Integer.parseInt(hold))); 
     temp = temp +c[0]; 
     System.out.println("temp is "+temp); 
     decodings(str,n=n+2,temp,len); 
    } 

} 

public static void main(String[]args){ 

    String str="121"; 
    decodings(str, 0,"",3); 

} 

} 

请帮我看看什么是错的我的实施。我吮吸递归,所以我正在试图证明我的技能。谢谢

+0

请告诉我们这行是第20 – ajb 2014-11-04 18:09:29

+0

我建议像'的System.out.println (n)'就在导致问题的'charAt'行之前。它可能会帮助您查看您的逻辑中可能存在哪些错误。或者使用调试器。 – ajb 2014-11-04 18:12:59

回答

0

问题是字符串从0 ... n-1。假定长度是3,但str.charAt(n)n应该从0到2。你用3修复它来调用它。 线,如果参照是:

if(str.charAt(n)<'2' && str.charAt(n+1)!='0') || (str.charAt(n)=='2' && str.charAt(n+1)<'6')) 

即使修复,因为你在同一行做N + 1也,你会得到错误后。


编辑:现在检查代码:

private void decodings(String str, int n,String temp,int len){ 

    if(n == len){ 
     System.out.println(temp); 
     return; 
    } 

    if(str.charAt(n)>='0'){ 
     char[] c = Character.toChars(96 + str.charAt(n)-'0'); 
     temp = temp +c[0]; 
     decodings(str,n+1,temp,len); 
    } 
    System.out.println("temp is "+temp); 
} 

public static void main(String[]args){ 
    String str="121"; 
    new countDecoding().decodings(str, 0,"",3); 
} 

输出为:

aba 
temp is aba 
temp is ab 
temp is a 
+0

谢谢,但我需要那些检查(n)和(n + 1)。改变任何事情都会给我带来扭曲的结果,你有什么其他方式可以实现这一点。 – user3137376 2014-11-04 18:53:00

+0

如果您提供一些销售输入和样品输出,我可以帮助您实施他!并解释你想做什么!另外我不明白你的意思是在字符比较? – StackFlowed 2014-11-04 18:55:40

+0

输入:{1,1} 输出:( “AA”,“K“) [2解释:AA(1,1)中,k(11)] 输入:{1,2,1} 输出:(“aba”,“au”,“la”) [3种解释:aba(1,2,1),au(1,21),la(12,1)] 输入:{9,1 ,8} 输出:{“iah”,“ir”} [2解释:iah(9,1,8),ir(9,18)],我基本上想要输出作为intepretations,形式为一个字符串 – user3137376 2014-11-04 18:58:17