2016-09-29 62 views
0

我应该递归地计算字符串中有多少“XX”,如果在双X前面有一个小的X,它不应该被计数。我不确定我做错了什么;我似乎被卡住的第一个回报,我不断收到0递归计算字符串中的字符串java

更新:我所拥有的一切工作似乎,但XXXXXX不断得到计为1,而不是2

public static int count(String s) { 

     if ((s.length() < 2)) 
      return 0; 
     int counter = 0; 
     if (s.charAt(0)== 'x') 
     { 
     if (s.substring(0, 2).equals("xX")) 
      return count(s.substring(3)); 

     } 
     if (s.substring(0, 2).equals("XX")) { 
      return 1 + count(s.substring(3)); 
     } 
     else 
      return counter + count(s.substring(1)); 
     } 



public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner kb = new Scanner(System.in); 
    System.out.println("Enter a String: "); 
    String s = kb.nextLine(); 
    System.out.println(count(s)); 
} 

}

+0

同样的功课? http://stackoverflow.com/q/39758831/2710704 – Tokazio

+0

如果字符串是“XXX”(1或2),应该返回什么?换句话说,你是否必须计算重叠的“XX”?如果是这样,递归调用'count'时减少位置索引('substring'的参数)。 –

+0

除非你看到'XX',否则不要过两。检查字符是否为“x”,如果是,则将其截断以供下一次调用。如果它是'X',请检查下一个是否是'XX'。如果是,请添加'1';否则,返回下一个调用的值。 – dasblinkenlight

回答

1

由于substring呼叫中的结束索引为,因此排除substring(0, 1)的调用将永远不会返回双字符字符串;只有由第一个字符组成的字符串才会被返回。

要取两个字符先检查长度是两个或更多,然后拨打substring(0, 2)