2013-02-01 137 views
0

我正在努力閱讀下面的堆棧跟蹤異常。我想知道如果你能幫助我嗎?如何讀取java.util.InputMismatchException堆棧跟蹤

我不明白代碼中的任何數字(例如數字74,2119和2160,它們代表什麼在這個異常?相當字面上,我需要知道我的代碼的哪一行導致問題如此我可以解決這個問題。請幫助。

這下面是我的堆棧跟蹤,並在它下面是Java代碼,我試圖解決一起把隨任務的樣本輸入文件。

java.util.InputMismatchException 
    in java.util.Scanner.throwFor(Scanner.java:909) 
    in java.util.Scanner.next(Scanner.java:1530) 
    in java.util.Scanner.nextInt(Scanner.java:2160) 
    in java.util.Scanner.nextInt(Scanner.java:2119) 
    in League.loadLeague(League.java:74) 
    in (Workspace:1) 

在這裏,下面是我的Java代碼與方法loadLeague,這使我很頭痛!

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

/** 
* Class League - An instance of this class represents the teams in a 
* football (or similar) league. It provides a class method for creating 
* a new instance of League by reading the data for the teams from a CSV 
* file. 
* 
* @author Lewis Jones 
* @version 1.0 
*/ 

public class League 
{ 
    /* instance variables */ 
    private String name; // The name of the league 
    private Team[] teams; // An array to hold the teams in the league 

    /** 
    * Constructor for objects of class League. It sets the name of the league 
    * to the String object provided as the first argument and initialises teams 
    * to an array of the size provided as the second argument. This constructor 
    * is private as it is intended for use only by the class method loadLeague(). 
    */ 
    private League(String aName, int size) 
    { 
     super(); 
     this.name = aName; 
     this.teams = new Team[size]; 
    } 

    /* class method */ 
    /** 
    * This method creates a new League object by reading the required details from 
    * a CSV file. The file must be organised as follows: 
    *  name(String), number of teams (int) 
    *  team name(String), won(int), drawn(int), lost(int), for(int), against (int) 
    *  and so on for each team 
    * Having created the new League object the method should create all the Team 
    * objects (using the data in the file to set their attributes) and add them 
    * to the teams array. 
    */ 
    public static League loadLeague() 
    { 
     League theLeague = null; 
     String pathname = OUFileChooser.getFilename(); 
     File aFile = new File(pathname); 
     Scanner bufferedScanner = null; 

     try 
     { 
     String leagueName; 
     int numberOfTeams; 

     String teamName; 
     int won; 
     int drawn; 
     int lost; 
     int goalsFor; 
     int goalsAgainst; 
     Scanner lineScanner; 
     String currentLine; 
     bufferedScanner = new Scanner(new BufferedReader(new FileReader (aFile)));  

     while (bufferedScanner.hasNextLine()) 
     { 
      currentLine = bufferedScanner.nextLine(); 
      lineScanner = new Scanner(currentLine); 
      lineScanner.useDelimiter(","); 

      leagueName = bufferedScanner.next(); 
      numberOfTeams = bufferedScanner.nextInt(); 

      teamName = bufferedScanner.next(); 
      won = lineScanner.nextInt(); 
      drawn = lineScanner.nextInt(); 
      lost = lineScanner.nextInt(); 
      goalsFor = lineScanner.nextInt(); 
      goalsAgainst = lineScanner.nextInt(); 

      Team aTeam = new Team(lineScanner.next()); 
      aTeam.setWon(lineScanner.nextInt()); 
      aTeam.setDrawn(lineScanner.nextInt()); 
      aTeam.setLost(lineScanner.nextInt()); 
      aTeam.setGoalsFor(lineScanner.nextInt()); 
      aTeam.setGoalsAgainst(lineScanner.nextInt()); 
      Team[] teams = new Team[numberOfTeams]; 
      teams[numberOfTeams] = aTeam; 
      numberOfTeams++; 
      theLeague = new League(leagueName, numberOfTeams); 
     } 
     } 
     catch (Exception anException) 
     { 
     System.out.println("Error: " + anException); 
     } 
     finally 
     { 
     try 
     { 
      bufferedScanner.close(); 
     } 
     catch (Exception anException) 
     { 
      System.out.println("Error: " + anException); 
     } 
     } 
     return theLeague; 
    } 

    /* instance methods */ 

    /** 
    * Displays the league table in tabular format to the standard output 
    */ 
    public void display() 
    { 
     System.out.println(this.name); 
     System.out.format("%20s %2s %2s %2s %2s %2s %2s % 2s\n","","P","W","L","D","F","A","Pt"); 
     for (Team eachTeam : this.teams) 
     { 
     System.out.format("%20s %2d %2d %2d %2d %2d %2d %2d\n", 
         eachTeam.getName(), eachTeam.getPlayed(), 
         eachTeam.getWon(), eachTeam.getDrawn(), 
         eachTeam.getLost(),eachTeam.getGoalsFor(), 
         eachTeam.getGoalsAgainst(), eachTeam.getPoints());   
     } 
    } 

    /** 
    * Arrange the elements of teams in their natural order. This will only 
    * work if a natural order has been defined for the class Team. 
    */ 
    public void sort() 
    { 
     // to be written later... 
    } 
} 

及以下的(文件)輸入採樣該程序應該讀成:

Scottish League Division 1,10 
Airdrie United ,3,2,11,14,25 
Clyde   ,5,7,4,21,17 
Dundee   ,7,2,7,21,18 
Gretna   ,10,3,3,43,20 
Hamilton Acas ,7,5,4,19,20 
Livingstone ,6,6,4,21,15 
Partick Thistle,8,4,4,25,29 
Queen of South ,3,3,10,11,31 
Ross County ,4,4,8,14,24 
St Johnstone ,6,6,4,26,16 

我已經真正完成這個任務奮鬥了現在的近一個星期!我希望那裏有人來幫助我,因爲它現在真的讓我感覺到了。請幫忙。任何提示,以查明我錯寫了哪些代碼將非常感激。

謝謝各位,

Lew。

+0

您是通過調試器中的代碼來查看哪一行輸入發生錯誤以及它與其他行有什麼不同? –

+0

嗨Miserable變量,恐怕我的IDE沒有Eclipse之類的調試器。我使用BlueJ。 –

+0

你會學會使用某種遠程調試方法。如果你不能用BlueJ來做,那麼你可以在命令行上使用jdb。 –

回答

2

這些數字(74,2119和2160)是代碼行。堆棧跟蹤的最上面一行是發生實際錯誤的地方,其餘是堆棧跟蹤中的調用位置。

因此,在這種情況下,Scanner.java:909意味着錯誤發生在掃描儀類的行909,該掃描程序類在掃描儀中的行1530處調用的函數中,等等。

+0

謝謝你,傑西,這有點幫助。那麼,我該如何進入Scanner類,或者說,打開它並糾正我的代碼? –

+0

嗯,我建議看看掃描儀API:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html看看你是如何使用它是不正確的。 –