【问题标题】:Importing a file to a 2d array in java在java中将文件导入二维数组
【发布时间】:2014-02-28 18:04:37
【问题描述】:

我正在尝试从文件中导入项目并将其放入 3 个不同的数组中,但我遇到了一些错误。这是我到目前为止的代码:

package project1;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;


public class Project1 {

 /**
 * @param args the command line arguments
 * @throws java.io.IOException
 */
public static void main(String[] args) throws IOException {
    fillArray();

}

public static void fillArray() throws IOException {
    Scanner teamList = new Scanner(new File("baseball_teams.txt"));
    String[] teamName = new String[35];
    int[] teamRank = new int[35];
    double[] teamWinPercentage = new double[35];
    int i = 0;
    while (teamList.hasNext()) {
        teamRank[i] = teamList.nextInt();
        teamName[i] = teamList.next();
        teamWinPercentage[i] = teamList.nextDouble();
        i++;
    }
}

}

当我尝试运行程序时出现此错误:

run:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at project1.Project1.fillArray(Project1.java:36)
at project1.Project1.main(Project1.java:23)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

这是文件的内容:

1   

Boston

0.605

2 

St.Louis

0.596   

3

Oakland

0.587 

4 

Atlanta

0.584 

5 

Pittsburgh

0.577 

6 

Detroit

0.567 

7 

Cleveland

0.564 

8 

Dodgers

0.564 

9 

Tampa Bay

0.559 

10 

Texas

0.558 

11 

Cincinnati

0.552 

12

Washington

0.531 

13 

Kansas City

0.531 

14 

Baltimore

0.525 

15 

Yankees

0.525 

16 

Arizona

0.500 

17 

Angels

0.481 

18 

San Diego

0.469 

19  

Giants

0.469  

20   

Mets    

0.457 

21   

Colorado 

0.457

22   

Milwaukee

0.457 

23   

Toronto 

0.457 

24   

Philadelphia 

0.451 

25   

Seattle 

0.438    

26   

Minnesota

0.407  

27   

Cubs    

0.407 

28   

Sox     

0.389  29    

Miami   

0.383 

30   

Houston 

0.315

如果有任何提示,我将不胜感激!

谢谢!

【问题讨论】:

  • 您也可以显示您的文件内容吗?文件中似乎有问题。检查InputMismatchException
  • 当文件包含其他内容时,您似乎正在尝试读取双精度数。您是否尝试过调试您的代码或只是添加打印语句以找出它试图读取的内容?
  • @user3052882 你能告诉我们你的文件内容吗
  • 用文件内容更新了问题。

标签: java file import multidimensional-array


【解决方案1】:

看起来您正在对 .next*() (.next() 和 .nextInt()) 进行两次调用,即使在循环条件下您只检查下一个。

如果我假设你的文件看起来是正确的

1 teamName1 100.0
2 teamName2 43.3
3 teamName3 43.6
4 teamName4 34.4
5 teamName5 23.2
.
.
.

如果是这样,那么可以尝试一次读取一行

int i = 0;
String[] ln = null;
while(teamList.hasNext()){
    ln = String.split(teamList.nextLine()); // default is split on ' ' character
    teamRank[i] = Integer.valueOf(ln[0]);
    teamName[i] = ln[1];
    teamWinPercentage[i] = Double.valueOf(ln[2]);
    ++i;
}

【讨论】:

  • 默认扫描仪分隔符匹配空格。因此,如果您知道它们通过的顺序,您可以进行后续的 .next*() 调用。
【解决方案2】:

您的代码中出现 InputMismatchException 异常,因为文件中有不可解析的数据,在堆栈跟踪中很明显,在我看来,您正在尝试调用 Scanner.nextDouble(),因此文件中的数据是其他内容然后在此调用时默认,确保

你可以看到堆栈跟踪清楚地显示了这个异常出现在你身上的那一行

at java.util.Scanner.nextDouble(Scanner.java:2456)

【讨论】:

    【解决方案3】:

    您的代码是正确的,应该可以工作。我相信这是一个语言环境问题。默认情况下,需要 Locale.getDefault() 来解析双打,我相信您的计算机语言环境并非如此。如果格式在您的语言环境中没有“.”,它将失败。您可以通过这样做来修复它

    teamList.useLocale(Locale.ENGLISH);
    

    【讨论】:

      【解决方案4】:

      我正在使用代码并通过进行这些更改使其工作:

      package project1;
      
      import java.io.File;
      import java.io.IOException;
      import java.util.Scanner;
      
      /**
       *
       * @author Jimmy
       */
      public class Project1 {
      
          /**
           * @param args the command line arguments
           * @throws java.io.IOException
           */
          public static void main(String[] args) throws IOException {
              String[] teamName = new String[35];
              int[] teamRank = new int[35];
              double[] teamWinPercentage = new double[35];
              fillArray(teamName, teamRank, teamWinPercentage);
      
          }
      
          public static void fillArray(String[] teamName, int[] teamRank,
                  double[] teamWinPercentage) throws IOException {
              Scanner teamList = new Scanner(new File("baseball_teams.txt"));
      
              int i = 0;
              while (teamList.hasNext()) {
                  teamRank[i] = teamList.nextInt();
                  teamList.nextLine();
                  teamName[i] = teamList.nextLine();
                  teamWinPercentage[i] = teamList.nextDouble();
                  i++;
              }
          }
      
      }
      

      不确定我究竟做了什么来修复它,但我相信它与我没有移至下一行之前的代码有关。

      再次感谢您的回答!

      【讨论】:

        猜你喜欢
        • 2012-09-11
        • 2017-09-07
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多