当前位置: 代码迷 >> Java相关 >> 求助:帮我看看这个程序的出错点
  详细解决方案

求助:帮我看看这个程序的出错点

热度:308   发布时间:2008-04-07 11:47:09.0
求助:帮我看看这个程序的出错点
编写一个程序,查找一个字符串数组中的最大字符串。
建议:字符串数组可以自己直接定义并初始化;字符串可以通过上面的第8题得到,相当于练习使用与测试上面的类;查找功能可以定义成通用函数,放到自己的函数库中


public class zy01 {
    public String s_str;
     public String[] d_str;
     public String f_str=" ,;''";
     public int k;


    public zy01() {
    }
    public void setInfo(String s)
    {
         int i, j;
        i=0; k=0;
        while(i<s_str.length())
        {
            if (f_str.indexOf(s_str.charAt(i))>=0) {++i; continue;}
            j=i;
            while (i<s_str.length() && f_str.indexOf(s_str.charAt(i))==-1) ++i;
            ++k; //s_str.subString(j,i);
         }
         d_str=new String[k];
         i=0; k=0;
         while(i<s_str.length())
         {
             if (f_str.indexOf(s_str.charAt(i))>=0) {++i; continue;}
             j=i;
             while (i<s_str.length() && f_str.indexOf(s_str.charAt(i))==-1) ++i;
             d_str[k]=s_str.substring(j,i);
             ++k;
          }
      }
      
      public void max(String s)
      {
          setInfo(s);
          int i,t,z;
          String ss;
          t=d_str[0].length();
          for(i=1;i<k;i++)
          {
           if(t<d_str[i].length())  
           {t=d_str[i].length();ss=d_str[i];}
          }
         return ss;
      }


setInfo函数是老师给出的,作用将一个大字符串按给定的分隔符分成若干个小字符串,而max是我自己写的,意图是查找出最大字符串并返回,但return ss却提示出错,我不明白为什么,请大家帮我解释一下,谢谢!
----------------解决方案--------------------------------------------------------
public class zy01 {
     public String s_str;
     public String[] d_str;
     public String f_str=" ,;''";
     public int k;


    public zy01(String s) {  
    s_str=new String(s);
    }
    public void setInfo(String s)
    {
         int i, j;
        i=0; k=0;
        while(i<s_str.length())
        {
            if (f_str.indexOf(s_str.charAt(i))>=0) {++i; continue;}
            j=i;
            while (i<s_str.length() && f_str.indexOf(s_str.charAt(i))==-1) ++i;
            ++k; //s_str.subString(j,i);
         }
         d_str=new String[k];
         i=0; k=0;
         while(i<s_str.length())
         {
             if (f_str.indexOf(s_str.charAt(i))>=0) {++i; continue;}
             j=i;
             while (i<s_str.length() && f_str.indexOf(s_str.charAt(i))==-1) ++i;
             d_str[k]=s_str.substring(j,i);
             ++k;
          }
      }
      
      public String max()
      {
          setInfo(s_str);
          int i,t,z;
          String ss="";
          t=d_str[0].length();
          for(i=1;i<k;i++)
          {
           if(t<d_str[i].length())  
           {t=d_str[i].length();ss=d_str[i];}
          }
         return ss;
      }
      public static void main(String []args)
      {
          zy01 s=new zy01("dfsdfgsdfg,sdfsdfsdffghgfhfghfghfghfghfghfghfghfghfghfghfghfghfghfg,asgfgdfgdfgdfgdfgfasfasdf.");
          System.out.println("zuida "+s.max());
          }
}
----------------解决方案--------------------------------------------------------
1.public zy01(String s) {  
    s_str=new String(s);
    }
为什么要有这段啊?

2.public String max() 为什么括号里面不加参数?

3.最后输出的s.max能否用s_str.max代替?要是不能的话为什么?

[[it] 本帖最后由 xiaolaba3330 于 2008-4-7 12:26 编辑 [/it]]
----------------解决方案--------------------------------------------------------
1.public zy01(String s) {  
    s_str=new String(s);
    }
为什么要有这段啊?//习惯把初始化放在构造函数里面

2.public String max() 为什么括号里面不加参数?//前面已经分好了不需要

3.最后输出的s.max能否用s_str.max代替?要是不能的话为什么?//不可以max()是对象的方法不是字符串的

[[it] 本帖最后由 sunkaidong 于 2008-4-7 12:56 编辑 [/it]]
----------------解决方案--------------------------------------------------------
2.public String max() 为什么括号里面不加参数?//前面已经分好了不需要
也就是说如果我把setinfo和max两个函数的代码合成为一个函数max的时候就应该写成是
public string max(string s)
然后下面就是int i, j;
        i=0; k=0;
        while(i<s_str.length())
        {
......
这些代码了,我这样理解对吗?
----------------解决方案--------------------------------------------------------
合一起的时候就可以都不需要了setInfo()主要实现把s_str按f_str里面的元素分割...然后把分割好的元素给数组引用....你自己做的只是比较大小..把大的取出来.所以你一旦把s_str初始化之后就可以了..不需要参数..当然用也可以..你可以把程序调整一下...
----------------解决方案--------------------------------------------------------
谢谢你啊,热心的朋友!!!不过我把这道题改进了一下,对所取出的每个字符串进行排序,还是遇到了很大的麻烦,就麻烦你在帮忙看一下啦!
public class zy02 {
    public String s_str;
   public String[] d_str;
   public String f_str=" ,;''";
   public int k;
   
    public zy02(String s){
         s_str=new String(s);
    }
   
    public void setInfo(String s)
    {
         int i, j;
        i=0; k=0;
        while(i<s_str.length())
        {
            if (f_str.indexOf(s_str.charAt(i))>=0) {++i; continue;}
            j=i;
            while (i<s_str.length() && f_str.indexOf(s_str.charAt(i))==-1) ++i;
            ++k; //s_str.subString(j,i);
         }
         d_str=new String[k];
         i=0; k=0;
         while(i<s_str.length())
         {
             if (f_str.indexOf(s_str.charAt(i))>=0) {++i; continue;}
             j=i;
             while (i<s_str.length() && f_str.indexOf(s_str.charAt(i))==-1) ++i;
             d_str[k]=s_str.substring(j,i);
             ++k;
          }
      }
   public String paixu()
   {   
       setInfo(s_str);
        String[] b_str;
        b_str=new String[k];
       String ss=" ";
       int i,j,m,n,p,q;
       char x,y,t;
       for(i=0;i<k;i++)
       {
           ss=d_str[i];
           j=d_str[i].length();
           for(m=0;m<j-1;m++)
           {
             for (n=m+1;n<j;n++)
             {
                 x=ss.charAt(m);
                 y=ss.charAt(n);
                 if (x<y) {t=x;x=y;y=t;}
             }
             }
             b_str[i]=ss;
            
       }
       return b_str[i];
   }

    public static void main(String[] args) {
        zy02 s=new zy02("i an a good student congratulation!");
          System.out.println(s.paixu());
    }
}

[[it] 本帖最后由 xiaolaba3330 于 2008-4-7 16:41 编辑 [/it]]
----------------解决方案--------------------------------------------------------
  相关解决方案