2015-11-24 26 views
5

我正在做一個練習,介紹面向對象編程與Java C. Thomas Wu。分隔符用法,Scanner爲什麼不返回?

Page 73提供代碼來請求全名,使用分隔符對其進行標記並將其打印回來。

import java.util.*; 

class Scanner1 
{ 
    public static void main(String[] args) 
    { 
     String name; 
     Scanner scanner = new Scanner(System.in); 

     scanner.useDelimiter(System.getProperty("line.separator")); 
     System.out.print("Enter full name (first, middle, last)"); 

     name = scanner.next(); 
     System.out.println("you entered " + name + "."); 
    } 
} 

問題是,我似乎不想打印回來,它凍結了程序,強制使用任務管理器關閉它。

Running Program

它編譯,並提出沒有錯誤。我已經過了幾次來檢查拼寫錯誤等

IDE with Delimiter Code

如果我刪除分隔符段(最後圖)它的工作原理一個第一令牌進行到第一次空間。所以錯誤在分隔符代碼的某處。

IDE without Delimiter Code

+8

您發佈的代碼適合我!你確定你在輸入後按「ENTER」? – ParkerHalo

+0

檢查您的輸出窗口。 –

+5

似乎是您使用的IDE的問題。可能是行分隔符的差異 – 6ton

回答

5

它似乎IDE的控制檯不考慮[Enter]鍵線分離。如果代碼正常工作,最好的方法是直接從終端(Windows上的控制檯)調用已編譯的Java文件。當然,首先您需要導航到編譯後的Java文件所在的目錄(Scanner1.class文件所在的目錄)。

E.g. 的Java Scanner1

如果你想成爲獨立的系統,做的最好的事情是這樣的編譯由您定義的分隔符,或只是使用內置的方法.nextLine()reference to Oracle docs

public class Main { 
    //These constant fields are from .nextLine() method in the Scanner class 
    private static final String LINE_SEPARATOR_PATTERN ="\r\n|[\n\r\u2028\u2029\u0085]"; 

    public static void main(String[] args){ 
     Scanner scanner = new Scanner(System.in); 
     scanner.useDelimiter(Pattern.compile(LINE_SEPARATOR_PATTERN)); 
     System.out.print("Enter name:"); 
     String name = scanner.next(); 
     System.out.println(name); 
    } 
} 
一個模式
+0

你有沒有試過你的代碼? –

+1

謝謝你的評論,現在它應該工作。我不知道爲什麼我使用了錯誤的常量字段。 –

相關問題