如何读取java.util.InputMismatchException堆栈跟踪

如何读取java.util.InputMismatchException堆栈跟踪,java,Java,我正在努力阅读下面的堆栈跟踪异常。我想知道你是否能帮助我 我不理解代码中的任何数字(如数字74、2119和2160,它们在这个异常中代表什么?确切地说,我需要知道代码的哪一行导致了问题,以便我能够解决它。请帮助 下面是我的堆栈跟踪,下面是我试图解析的java代码以及任务附带的示例输入文件 java.util.InputMismatchException in java.util.Scanner.throwFor(Scanner.java:909) in java.util.Scanner

我正在努力阅读下面的堆栈跟踪异常。我想知道你是否能帮助我

我不理解代码中的任何数字(如数字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.

这些数字(74、2119和2160)是代码行。堆栈跟踪的最上面一行是实际错误发生的位置,其余的是堆栈跟踪中的调用位置


所以在这个事件中,
Scanner.java:909
意味着错误发生在Scanner类的第909行,它在Scanner中的第1530行调用的函数中,依此类推。

您是否在调试程序中逐步检查了代码,以查看哪一行输入产生了错误,以及它与其他行有什么不同?嗨,可怜的变量,我是一个fraid my IDE没有像Eclipse那样的调试器。我使用BlueJ。你最好学习使用某种远程调试方法。如果你不能使用BlueJ,那么你可以在命令行上使用jdb。或者添加日志记录,大量日志记录。哦,谢谢你Jesse,这有点帮助。那么我如何准确地进入Scanner类,或者说,打开它并记录t验证我的代码??好吧,我建议看一下Scanner API:看看你是如何使用它的,是否不正确。