黑马程序员技术交流社区

标题: 自己刚写的一个程序的中的错误,请大家解答一下 [打印本页]

作者: IT人    时间: 2013-12-28 19:24
标题: 自己刚写的一个程序的中的错误,请大家解答一下
package com.itheima;

public class GetSub {

        public static void main(String[] args) throws Exception{
                // TODO Auto-generated method stub
       String str = "abcd";
       int num = 3;
       String[] ss=getSub(str,num);
       for(String s : ss)
               System.out.println(s);
                  
        }
    public static String[] getSub(String str,int sublength){
                String[] s = new String[]{};//用于保存字串
                int count = 0;
                int len = str.length();
                if (sublength>len || sublength<=0)
                      return s;//如果子串长度大于字符串长度,则不会有满足要求的子串
                else{
                        int start = 0;
                        int startPos = 0;
                        s=new String[C(sublength,len)];
                        while((str.length() - start) >= sublength){
                                count++;//字串数目
                                String newStr = "";
                        String subStr = str.substring(start,start+1) + str.substring(startPos+1, startPos+sublength-1);
                        for(int i = sublength;i < str.length();i++){
                                 newStr = (String)(subStr + str.charAt(i));
                                 s[count++] = newStr;
                        }
                     
                        startPos++;
                     
                     if((str.length()-startPos) < sublength){
                             start++ ;
                             }
                     
                  
                        }
                }
                return s;
           
    }
    public static int C(int m,int n){
            int c=1;
            int k=1;
            for (int i=1;i<=m;i++){
              c=c*(n+1-i);
              k=k*i;
              }
            return (c/k);
            }
}
运行提示我:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
        at com.itheima.GetSub.getSub(GetSub.java:30)
        at com.itheima.GetSub.main(GetSub.java:9)

作者: 高波    时间: 2013-12-28 20:53
数组角标越界异常,你的count被++了两边
  1. while ((str.length() - start) >= sublength) {
  2.                                 count++;// 字串数目
  3.                                 String newStr = "";
  4.                                 String subStr = str.substring(start, start + 1)
  5.                                                 + str.substring(startPos + 1, startPos + sublength - 1);
  6.                                 for (int i = sublength; i < str.length(); i++) {
  7.                                         newStr = (String) (subStr + str.charAt(i));
  8.                                         //count在前面已经执行++操作,再将count++作为角标就又执行一遍,所以直接传count就可以了
  9.                                         s[count++] = newStr;
  10.                                 }
复制代码

作者: IT人    时间: 2013-12-28 20:59
哈哈!大意了!谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2