求助:帮我看看这个程序的出错点
编写一个程序,查找一个字符串数组中的最大字符串。建议:字符串数组可以自己直接定义并初始化;字符串可以通过上面的第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]]
----------------解决方案--------------------------------------------------------