2012-12-03 45 views
1
import java.io.*; 
import java.util.*; 

class Read 
{ 
    public static void main(String args[]) 
    { 
     try { 
     Scanner scan = new Scanner(new java.io.File("textfile.txt")); 
     } catch (FileNotFoundException e){ 
     }   
     while(scan.hasNext()){ 
     String line = scan.nextLine(); 
     String[] elements = line.split(","); 
     } 
    } 
} 

爲什麼我得到Java編譯器不能找到我的掃描儀可變

error: cannot find symbol 
     while(scan.hasNext()){ 
      ^
    symbol: variable scan 

+0

我「所投票數」頁面顯示,我沒有做這樣的事情不正確。 –

+0

夠公平的。你知道你剛剛回復的帖子是3歲半,對不對? – paulsm4

回答

4

問題在於範圍。您可以聲明Scanner對象在try...catch塊之外,並且實例化其中的

確實也是這種情況,您希望將所有依賴於Scanner的I/O操作都在try...catch中實例化,否則您將在稍後遇到問題。

例子:

public static void main(String[] args) { 
    Scanner scan = null; 
    try { 
     scan = new Scanner(new File("textfile.txt")); 
     // other I/O operations here including anything that uses scan 
    } catch (FileNotFoundException e) { 
     System.out.println("helpful error message", e); 
    } 
} 
+0

謝謝我解決了它,但現在我得到錯誤:變量掃描可能沒有初始化 \t while(scan.hasNext()){ –

+1

然後聲明並實例化變量爲null。儘管這讓我感到害怕 - 如果將所有的I/O操作都放在try ... catch的try部分中,那麼不應該遇到這個問題。 – Makoto

+0

錯誤發生在線while(scan.hasNext()){ –

0

scantry-catch塊之外聲明,或者你可以把while環路try-catch

+1

一定要設置'掃描'爲null你宣佈它,你仍然會得到錯誤。 –

+0

@熱舔我明白了,非常感謝。 – bhuang3

+1

或*在try/catch塊中*和while循環一起。掃描是否有異常是沒有意義的,是嗎?所以把它放在循環裏面肯定是合理的。恕我直言... – paulsm4

-1

試試這個代碼

import java.io.*; 
import java.util.*; 

class Read 
{ 
public static void main(String args[]) 
{ 
    Scanner scan=null; 
    try 
    { 
     scan = new Scanner(new java.io.File("textfile.txt")); 
     while(scan!=null) 
     { 
     String line = scan.nextLine(); 
     String[] elements = line.split(","); 
     } 
    } catch (FileNotFoundException e){ }   
} 
} 
+0

如果這個文件不存在,你的代碼就會炸燬,重新解引用null。 – Makoto

+1

@Makoto Oops修復它 –

+0

...不,你沒有。堅持下去,你會很快得到它。 :) – Makoto

0

地點變更where循環。

import java.io.*; 
import java.util.*; 

class Read 
{ 
    public static void main(String args[]) 
    { 
     try { 
     Scanner scan = new Scanner(new java.io.File("textfile.txt")); 
     while(scan.hasNext()){ 
      String line = scan.nextLine(); 
      String[] elements = line.split(","); 
     } 
     } catch (FileNotFoundException e){ 
      e.printStackTrace(); 
     }   
    } 
} 
+0

爲什麼選擇投票? – Chan

+1

你的回答是絕對正確的。它看起來像一些idi0t通過和downvoted每個人。可能沒有服用他/她的藥物:) C'est la vie ... – paulsm4

-1
class Read 
{ 
    private static final String TEXT_FILE = "textfile.txt"; 

    public static void main(String args[]) 
    { 
     // BAD 
     try { 
      Scanner scan = new Scanner(new java.io.File("textfile.txt")); 
     } 
     catch (FileNotFoundException e) { 
      ; // Eating exceptions - a bad habit :(
     }   
     while(scan.hasNext()){ 
      String line = scan.nextLine(); 
      String[] elements = line.split(","); 
     } 
    } 
} 

相反......

class Read 
{ 
    public static void main(String args[]) 
    { 
     // Good 
     try { 
      Scanner scan = new Scanner(new java.io.File(TEXT_FILE)); 
      while(scan.hasNext()){ 
      String line = scan.nextLine(); 
      String[] elements = line.split(","); 
      } 
     } 
      catch (FileNotFoundException e){ 
      System.out.println ("Error parsing " + TEXT_FILE + ": " + e.getMessage()); 
     }   
    } 
} 
+1

爲什麼你重新聲明變量?變量陰影在這裏肯定會生效。 – Makoto

+2

只需將掃描變量放在try catch塊中... – Chan

+1

@ Duli-chan - 我同意。在這種情況下,在try/catch塊內聲明「Scanner scan」是最好的。我相應地更改了代碼:) – paulsm4