2013-02-28 61 views
0

我必須檢索三個輸入一個整數,一個字符串和一個雙精度;這裏就是我想我會做[注:包含字符串的空間]使用掃描儀對象讀取一系列輸入

record.setAccountNumber(input.nextInt()); 
record.setName(input.nextLine()); 
record.setBalance(input.nextDouble()); 

我試着在

record.setName(input.nextLine()); 

與輸入input.next更換input.nextLine()() ,由於InputMisMatchException,但問題仍未解決。該錯誤被拋出,因爲一個double值可能被分配給一個新的行值[這是我認爲不確定]有沒有辦法檢索包含空格的字符串,並能夠完成我必須輸入的三個輸入同時。感謝

注:我無法找到任何有關問題這一個 讓我補充內發生錯誤

public void addAccountRecords(){ 
    AccountRecord record = new AccountRecord(); 
    input = new Scanner (System.in); 

    try { 
     output = new Formatter("oldmast.txt"); 
    } catch (FileNotFoundException e) { 
     System.err.println("Error creating or opening the file"); 
     e.printStackTrace(); 
     System.exit(1); 
    } catch (SecurityException e){ 
     System.err.println("No write access to this file"); 
     e.printStackTrace(); 
     System.exit(1); 
    } 


    System.out.println("Enter respectively an account number\n"+ 
      "a name of owner\n"+"the balance"); 

     while (input.hasNext()){ 
      try{ 
       record.setAccountNumber(input.nextInt()); 
       record.setName(input.nextLine()); 
       record.setBalance(input.nextDouble()); 

       if (record.getBalance() >0){ 
        output.format("%d\t%s\t%,.2f%n",record.getAccountNumber(), 
          record.getName(),record.getBalance()); 
        record.setCount((record.getCount()+1)); 
       }else 
        System.err.println("The balance should be greater than zero"); 

      }catch (NoSuchElementException e){ 
       System.err.println("Invalid input, please try again"); 
       e.printStackTrace(); 
       input.nextLine(); 

      }catch (FormatterClosedException e){ 
       System.err.println("Error writing to File"); 
       e.printStackTrace(); 
       return; 
      } 
      System.out.println("Enter respectively an account number\n"+ 
        "a name of owner\n"+"the balance\n or End of file marker <ctrl> z"); 
     }//end while 
     output.close(); 
     input.close(); 

}//end AddAccountRecords 

回答

1

nextLine將讀取所有剩餘的數據來結束整個方法你字符串,包括雙精度。您需要改用next。我不知道爲什麼你會得到一個InputMisMatchException - 這適用於例如:

String s = "123 asd 123.2"; 
Scanner input = new Scanner(s); 
System.out.println(input.nextInt()); //123 
System.out.println(input.next());  //asd 
System.out.println(input.nextDouble()); //123.2 

所以這個問題可能是在你的輸入或別的地方在你的代碼。

注:

  • 如果我使用Scanner input = new Scanner(System.in);並進入123 asd 123.2我得到了相同的結果。
  • 如果字符串(第二項)包含空格,第二個字將被解析爲雙並會產生錯誤報告
+0

耶肯定的作品,但不是使用ASD嘗試使用[爲d]與一個空間,我不知道它是否會工作。 – 2013-02-28 16:05:33

+0

@RuruMorlano這是我的第二個音符。如果你在中間有一個空格,你應該分別詢問int,string和double(即在單獨的行上)。 – assylias 2013-02-28 16:07:52