2014-02-11 58 views
0

重定位分隔符注意:不想要這個問題的答案,因爲我想教自己,但我卡住了,並希望建議如何做。JAVA:重置字符串後使用.nextDouble

所以實踐中,我必須讀取輸入文件並對其進行回顯。

實踐問題是創建一個ATM交易中,輸入文件的一行寫着: 斯泰西·瓊斯,300 d 100

我必須把它作爲輸出:

name 
current balance 
action (D means deposit) 
transaction amount 

我現在有的名稱,並獲得當前餘額我改變了分隔符以逗號結束該行,但是我的問題是在當前餘額前仍有空白(即300)

這是我的代碼:

try { 
    FileInputStream stream = new FileInputStream("src/transactions.txt"); 
    fileIn = new Scanner(stream); 

    fileIn.useDelimiter(","); 
    name = fileIn.next(); 
    System.out.println("Customer Name: " + name); 
    fileIn.reset(); 
    balance = fileIn.nextDouble(); 
    System.out.printf("Checking balance before transaction: %.2f", balance); 

} catch (FileNotFoundException e) { 
    System.out.println("Transactions cannot be found"); 
} 

我收到的錯誤是:

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:857) 
at java.util.Scanner.next(Scanner.java:1478) 
at java.util.Scanner.nextDouble(Scanner.java:2404) 
at MP3.main(MP3.java:30) 
+0

'Catch' *該異常*重新熟食店的隊友第二令牌和打印你想'nextDouble'輸入,你就會明白這個問題。 – Maroun

+0

捕獲異常和我System.out.println(fileIn),它給了我這個: delimiters = \ p {javaWhitespace} + – Joseph

回答

0

問題是與您的輸入。當你做fileIn.nextDouble()時,你期待着雙倍。你從文件中得到的實際上是字符串' 300',所以前面有一個空格。 這不能被掃描儀轉換爲雙倍。

這應該指出你已經在正確的方向。

0

您可以通過空間

FileInputStream stream = new FileInputStream("src/transactions.txt"); 
     fileIn = new Scanner(stream); 
     fileIn.useDelimiter(","); 
     name = fileIn.next(); 
     System.out.println("Customer Name: " + name); 
     Scanner s = new Scanner(fileIn.next()); 
     s.useDelimiter(" "); 
     balance = s.nextDouble(); 
     System.out.printf("Checking balance before transaction: %.2f %n", balance); 
     System.out.println("Action: "+s.next()); 
     System.out.println("Transaction amount: "+s.nextDouble()); 
     fileIn.reset();