Re: [問題] 再請教一個關於token的問題
有鑒於有人說我應該直接點,
這樣講話只會有滿天的蝙蝠飛舞,
玩家是不會也無法理解的,
所以我們從頭來.
===============================================================
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
討論串 (同標題文章)
完整討論串 (本文為第 11 之 12 篇):