Импорт файла в массив 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.