勤奋学习java,有个关于StringTokenizer的问题
登录 | 论坛导航 -> 华新鲜事 -> 求学狮城 | 本帖共有 15 楼,分 1 页, 当前显示第 1 页 : 本帖树形列表 : 刷新 : 返回上一页
<<始页  [1]  末页>>
作者:夜不归宿 (等级:4 - 马马虎虎,发帖:2355) 发表:2003-04-28 11:59:05  楼主  关注此帖
勤奋学习java,有个关于StringTokenizer的问题
import java.util.*;
class MyTest
{
public static void main(String[] args)
{
String MyString="I love you. a b c s e f g ";
System.out.println(my1(MyString,7));
System.out.println(my1(MyString,2));

}
public static String my1(String s, int k)
{
StringTokenizer st=new StringTokenizer(s," \t\n\r,.;:");
String f=null;
for(int i=0;i<=st.countTokens();i++)
{
if(i==k)
f=st.nextToken();
st.nextToken();

}
return f;
}
}
-----------------
有这么个问题
System.out.println(my1(MyString,7));的时候后面输出的是null
我自己认为是st.countTokens()出了问题
换成 st.hasMoreTokens()以后得到解决
但是我在里面加了System.out.println(st.countTokens());输出是正确的10。循环应该不会出问题
不知道为什么会这样>.<
哪个学长教教我
谢谢了先
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:夜不归宿 (等级:4 - 马马虎虎,发帖:2355) 发表:2003-04-28 12:04:48  2楼
还有附加问一个
blueJ的debugger怎么用?
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:棋主 (等级:2 - 初出茅庐,发帖:55) 发表:2003-04-28 14:25:06  3楼 评分:
小伙子勤奋啊!
when u use StringTokenizer, in the for loop if u write for( int i =0; i< st.countTokens(); i++) then u may get wrong answer, coz st.countTokens() is variable. In the for loop, u will call st.nextToken(), then after that, st.countTokens() minus 1 already. So u may get null use your program. :st.countTokens() is always count the tokens left.

donot know what is blueJ.

r u lfj??? hehehe

欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:辰星 (等级:12 - 登峰造极,发帖:6227) 发表:2003-04-28 15:18:09  4楼
>>>>>
StringTokenizer st=new StringTokenizer(s," \t\n\r,.;:",fasle);

加上false
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:辰星 (等级:12 - 登峰造极,发帖:6227) 发表:2003-04-28 15:18:52  5楼
还有附加问一个blueJ的debugger怎么用?
>>>>>>
用J Creator不会死人的。
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:夜不归宿 (等级:4 - 马马虎虎,发帖:2355) 发表:2003-04-28 15:49:44  6楼
>>>>>>用J Creator不会死人的。
....我想看看程序运行的过程,一步一步的debug
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:夜不归宿 (等级:4 - 马马虎虎,发帖:2355) 发表:2003-04-28 15:51:33  7楼
>>>>>StringTokenizer st=new StringTokenizer(s," \t\n\r,.;:",fasle); 加上false
说清楚点,加false什么意思>.<
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:夜不归宿 (等级:4 - 马马虎虎,发帖:2355) 发表:2003-04-28 15:53:28  8楼
小伙子勤奋啊!when u use StringTokenizer, in the for loop if u write for( int i =0; i< st.countTokens(); i++) then u may get wrong answer, coz st.countTokens() is variable. In the for loop, u will call st.nextToken(), then after that, st.countTokens() minus 1 already. So u may get null use your program. :st.countTokens() is always count the tokens left. donot know what is blueJ. r u lfj??? hehehe
谢谢了:D说的真清楚.
ps
我是zz游戏版的斑竹
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:cigar (等级:2 - 初出茅庐,发帖:296) 发表:2003-04-28 16:45:48  9楼 评分:
Come in-->>
//for(int i=0;i<=st.countTokens();i++)
here you can't use countTokens as loop condition, because it varies during execution. Once nextToken() executes once, the value of countTokens() decrements by one
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:夜不归宿 (等级:4 - 马马虎虎,发帖:2355) 发表:2003-04-28 17:40:37  10楼
Come in-->>//for(int i=0;i (more...)
谢谢了,那个原来是变量>.<
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:辰星 (等级:12 - 登峰造极,发帖:6227) 发表:2003-04-28 18:27:45  11楼 评分:
说清楚点,加false什么意思>.
加false的意思是
例如StringTokenizer(string,",. ",fasle);

那么就不会返回","和"."

你在这里用StringTokenizer(s," \t\n\r,.;:");

那么在遇到"\t","\n",".",";"的时候,nextToken()也会返回。

如果加false,nextToken()在遇到上面的指定的string,会忽略掉它们。
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:辰星 (等级:12 - 登峰造极,发帖:6227) 发表:2003-04-28 18:28:38  12楼
....我想看看程序运行的过程,一步一步的debug
>>>>>>>>
自己在程序中间加

System.out.println("Running Here");

System.out.println("i="+i);

System.out.println(.....);


欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:辰星 (等级:12 - 登峰造极,发帖:6227) 发表:2003-04-28 18:29:29  13楼
加false的意思是例如StringTokenizer(string,",. ",fasle); 那么就不会返回","和"." 你在这里用StringTokenizer(s," \t\n\r,.;:"); 那么在遇到"\t","\n",".",";"的时候,nextToken()也会返回。 如果加false,nextToken()在遇到上面的指定的string,会忽略掉它们。
啊。好像
默认的就是false。。不好意思:P
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:duck (等级:7 - 出类拔萃,发帖:6205) 发表:2003-04-29 16:07:23  14楼 评分:
关于debug
楼下已经有人告诉你是什么原因了,我来给你讲解一下怎么debug这个program。

通常while loop里执行的东西,不是我们想要的东西,怎么办?把里面每步都print出来,看看是哪步出了问题。

将第19行的st.nextToken();里改成 System.out.println(i+" "+st.nextToken());。然后运行程序,看看结果如何。结果如下:

0 I

1 love

2 you

3 a

4 b

5 c

null \\my1(MyString,7) 的结果

0 I

1 love

2 a

3 b

4 c

you \\my1(MyString,2) 的结果


那个while loop在第一次执行了5次就停了,在第二次,i的指数只是到4就结束了。为什么?请你来分析吧。:)
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:夜不归宿 (等级:4 - 马马虎虎,发帖:2355) 发表:2003-04-29 23:41:48  15楼
关于debug楼下已经有人告诉你是什么原因了,我来给你讲解一下怎么debug这个program。 通常while loop里执行的东西,不是我们想要的东西,怎么办?把里面每步都print出来,看看是哪步出了问题。 将第19行的st.nextToken();里改成 System.out.println(i+" "+st.nextToken());。然后运行程序,看看结果如何。结果如下: 0 I 1 love 2 you 3 a 4 b 5 c null \\my1(MyString,7) 的结果 0 I 1 love 2 a 3 b 4 c you \\my1(MyString,2) 的结果 那个while loop在第一次执行了5次就停了,在第二次,i的指数只是到4就结束了。为什么?请你来分析吧。:)
CS1102 的tutor :D 谢谢duck
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
论坛导航 -> 华新鲜事 -> 求学狮城 | 返回上一页 | 本主题共有 15 篇文章,分 1 页, 当前显示第 1 页 | 回到顶部
<<始页  [1]  末页>>

请登录后回复:帐号   密码