2015-06-21 73 views
0

所以我正在從文件中讀取信息並獲取類型不匹配錯誤。我通過調試器運行它,但我不確定是什麼原因造成的 - 因爲它正在讀取正確的數字(在本例中爲2000),但似乎並不認爲它是整數?閱讀數字時遇到類型不匹配錯誤?

我的代碼如下:

public class JobSalaries { 
    public static void main(String[] args) throws Exception { 
     final int ARRAY_SIZE = 10; 
     Employee[] employees2014, employees2015; 
     int counter2014, counter2015; 
     File payroll; 

     payroll = new File("jobpayroll.txt"); 
     employees2014 = new Employee[ARRAY_SIZE]; 
     employees2015 = new Employee[ARRAY_SIZE]; 
     Scanner scan = new Scanner(payroll).useDelimiter(",| "); 
     counter2014 = 0; 
     counter2015 = 0; 
     while(scan.hasNext()) { 
     int year = scan.nextInt(); 
     String classification = scan.next(); 
     String lname = scan.next(); 
     String fname = scan.next(); 
     int monthlysalary = scan.nextInt(); 
     if(year == 2014 && classification.equals("Employee")) { 
      String name = fname + " " + lname; 
      Employee tempemployee = new Employee(name,monthlysalary); 
      employees2014[counter2014] = tempemployee; 
     } 
     } 
    } 
} 

並從該信息讀取:

2014員工史密斯,約翰2000

2015年推銷員瓊斯,比爾3000 100000

2014布什喬治5000 55

2014員工曼,薩拉4000

2015年銷售員馬可,喬丹5300 440000

2014執行蘭斯,湯姆1000 60

2014員工戈爾,弗蘭克7000

2015年推銷員麥迪遜,米歇爾8000 150000

2014執行貝瑞,阿什利7600 56

(爲了簡單起見,我的錯誤就行了:INT monthlysalary = scan.nextInt();)

+0

確定**「正確的數字(在本例中爲2000)」**不包含任何空格或空格字符? – Bikku

+0

之後沒有任何空間,但這讓我想到了 - 顯然是因爲它後面有一個新的線(因爲它是列表中的第一項),它會拋出一個錯誤 - 我會怎麼做來解決這個問題? –

回答

0

我好不容易有點頭腦風暴之後弄明白 - 這個問題的事實來了,有一個在第一行之後出現新行(「技術上」是返回),並且掃描正在讀取並且無法將其解析爲整數,因此我爲「\ r」添加了另一個分隔符,這使得我可以讀取它作爲整數,問題解決了!

+0

你確定嗎?您的方法只需要一個整數作爲月薪,其中您爲多位員工定義了多個月薪。 – Ouney

+0

我確定!這些數字將被讀取 - 但我會在if語句中這樣做(我知道這很古怪,但這是分配所要求的)。它們與「分類」相關,這是我將用來確定是否需要讀取額外數字的內容。 –

1

問題是你想跳到下一行,沒有在一些行上完成令牌。例如

int monthlysalary = scan.nextInt();結果:

2015 Salesman Jones, Bill 3000 100000 
         ^
          monthlysalary 

然後int year = scan.nextInt();結果:

2015 Salesman Jones, Bill 3000 100000 
          ^
           year 
0

昨天here討論類似的問題。我假設在this線程中討論的根本原因。請看看以下變化:

public class JobSalaries { 
    public static void main(String[] args) throws Exception { 
     final int ARRAY_SIZE = 10; 
     Employee[] employees2014, employees2015; 
     int counter2014, counter2015; 
     File payroll; 

     payroll = new File("jobpayroll.txt"); 
     employees2014 = new Employee[ARRAY_SIZE]; 
     employees2015 = new Employee[ARRAY_SIZE]; 
     Scanner scan = new Scanner(payroll).useDelimiter(",| "); 
     counter2014 = 0; 
     counter2015 = 0; 
     while(scan.hasNext()) { 
      int year = scan.nextInt(); 
      String classification = scan.next(); 
      String lname = scan.next(); 
      String fname = scan.next(); 
      // int monthlysalary = scan.nextInt(); 
      int monthlysalary = Integer.parseInt(scan.nextLine()); 
      if(year == 2014 && classification.equals("Employee")) { 
       String name = fname + " " + lname; 
       Employee tempemployee = new Employee(name,monthlysalary); 
       employees2014[counter2014] = tempemployee; 
      } 
     } 

而不是使用scan.netxtInt()嘗試使用scan.nextLine(),它解析爲一個整數。

0

據我所見,你的代碼有兩個問題。

  1. 您的數據似乎不是預期格式。 第二行起,你有兩個定義的薪水,這不是程序所期望的。
  2. 由於您未在useDelimiter方法中包含換行符,因此您得到InputMismatchError。更改你的正則表達式爲[,\n ],它會工作。
0

這些都是你可以做些什麼來解決它

  1. 使用分隔符[\ N]
  2. 既然你不讀一行的所有令牌,在結尾處添加scan.nextLine();的事情循環(它將把掃描器移動到下一行,忽略行上的其他記號)。