Импорт файла в массив 2d в java

Я пытаюсь импортировать элементы из файла и помещать их в 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];
 ******[] teamWinPercentage = new ******[35];
 int i = 0;
 while (teamList.hasNext()) {
 teamRank[i] = teamList.nextInt();
 teamName[i] = teamList.next();
 teamWinPercentage[i] = teamList.**********();
 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.**********(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

Я был бы признателен за любые советы!

Благодарю!

4 ответа

Исключение исключения InputMismatchException в вашем коде, поскольку в файле нет данных. В stacktrace видно, что вы пытаетесь вызвать Scanner.**********(), поэтому ваши данные в файле - это нечто иное, чем Default время этого вызова, убедитесь, что

вы можете видеть, что в стеке четкости отображается строка, в которой это исключение приходит к вам

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


Кажется, вы делаете два вызова.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] = ******.valueOf(ln[2]);
 ++i;
}


Я играл с кодом и заставлял его работать, внося такие изменения:

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];
 ******[] teamWinPercentage = new ******[35];
 fillArray(teamName, teamRank, teamWinPercentage);

 }

 public static void fillArray(String[] teamName, int[] teamRank,
 ******[] 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.**********();
 i++;
 }
 }

}

Не уверен, что я сделал, чтобы исправить это, но я считаю, что это как-то связано с кодом, который у меня был, прежде чем не перейти к следующей строке.

Еще раз спасибо за ответы!


Ваш код правильный и должен работать. Я считаю, что это проблема локали. По умолчанию для поиска парсеров потребуется Locale.getDefault(), и я считаю, что это не относится к локалям ваших компьютеров. Если формат не совпадает с "." S в вашей локали, он не сработает. Вы можете исправить это, сделав

teamList.useLocale(Locale.ENGLISH);

licensed under cc by-sa 3.0 with attribution.