作者ogamenewbie (荷兰烂银行)
看板java
标题Re: [问题] 再请教一个关於token的问题
时间Wed May 3 10:14:20 2006
有鉴於有人说我应该直接点,
这样讲话只会有满天的蝙蝠飞舞,
玩家是不会也无法理解的,
所以我们从头来.
===============================================================
for(k=0;a[k]!="\0";k++){
StringTokenizer tokens = new StringTokenizer(a[k]);
while(tokens.hasMoreTokens()) {
if((tokens.nextToken()).equals("SELECT"))
Select();
if((tokens.nextToken()).equals("INSERT"))
Insert();
if((tokens.nextToken()).equals("DELETE"))
Delete();
}
}
===============================================================
首先我们应该先去看看,
tokens.nextToken() 到底拿了什麽东西...
===============================================================
for(k=0;a[k]!="\0";k++){
StringTokenizer tokens = new StringTokenizer(a[k]);
while(tokens.hasMoreTokens()) {
String sTemp = tokens.nextToken();
if(sTemp.equals("SELECT"))
//if((tokens.nextToken()).equals("SELECT"))
Select();
sTemp = tokens.nextToken();
if(sTemp.equals("INSERT"))
//if((tokens.nextToken()).equals("INSERT"))
Insert();
sTemp = tokens.nextToken();
if(sTemp.equals("DELETE"))
//if((tokens.nextToken()).equals("DELETE"))
Delete();
}
}
===============================================================
我们先用一个变数把原先做的事情替换掉, 这样跟原先的程式是一样的.
除了会多一个叫 sTemp 的东西出来.
===============================================================
for(k=0;a[k]!="\0";k++){
StringTokenizer tokens = new StringTokenizer(a[k]);
while(tokens.hasMoreTokens()) {
String sTemp = tokens.nextToken();
if(sTemp.equals("SELECT"))
System.out.println("Token 1: " + sTemp);
//if((tokens.nextToken()).equals("SELECT"))
Select();
sTemp = tokens.nextToken();
if(sTemp.equals("INSERT"))
System.out.println("Token 2: " + sTemp);
//if((tokens.nextToken()).equals("INSERT"))
Insert();
sTemp = tokens.nextToken();
if(sTemp.equals("DELETE"))
System.out.println("Token 3: " + sTemp);
//if((tokens.nextToken()).equals("DELETE"))
Delete();
}
}
===============================================================
然後我们再去把 sTemp 印出来看看是什麽东西.
如果你有用 IDE, 你可以在除错模式下用 Inspect 或 Watch
去直接对 tokens.nextToken() 或 sTemp 来进行监测.
如果你 a[0] 的内容是 "aaa bbb ccc ddd"
那大概你在 console 会看到
Token 1: aaa
Token 2: bbb
Token 3: ccc
Token 1: ddd
然後NoSuchElementException
(这边你可以发现我原先是用 Token: 而已,
但是发现到没有监别度可言, 所以我加了 123...)
这可能就是说, 一连做了三次 tokens.nextToken()
所以没有检查到还有没有下一个 token.
===============================================================
for(k=0;a[k]!="\0";k++){
StringTokenizer tokens = new StringTokenizer(a[k]);
while(tokens.hasMoreTokens()) {
String sTemp = tokens.nextToken();
if(sTemp.equals("SELECT"))
System.out.println("Token 1: " + sTemp);
//if((tokens.nextToken()).equals("SELECT"))
Select();
//sTemp = tokens.nextToken();
if(sTemp.equals("INSERT"))
System.out.println("Token 2: " + sTemp);
//if((tokens.nextToken()).equals("INSERT"))
Insert();
//sTemp = tokens.nextToken();
if(sTemp.equals("DELETE"))
System.out.println("Token 3: " + sTemp);
//if((tokens.nextToken()).equals("DELETE"))
Delete();
}
}
===============================================================
所以把多的两个 tokens.nextToken() 注解掉看看.
再跑跑输出结果, 再看看跟刚刚有什麽不一样...
如果连加上去的输出都看不到的话,
可能问题不在这个地方也说不定,
毕竟这只是片断程式码,
这是我个人早期侦错的一些做法...
就这样...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.25.148.49