Re: [問題] 再請教一個關於token的問題

看板java作者 (荷蘭爛銀行)時間18年前 (2006/05/03 09:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串11/12 (看更多)
有鑒於有人說我應該直接點, 這樣講話只會有滿天的蝙蝠飛舞, 玩家是不會也無法理解的, 所以我們從頭來. =============================================================== 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
文章代碼(AID): #14M0p1sZ (java)
討論串 (同標題文章)
文章代碼(AID): #14M0p1sZ (java)