2014-02-04 2 views
1

Я пытаюсь импортировать элементы из файла и помещать их в 3 разных массива, и я получаю некоторые ошибки. Вот код, который я до сих пор:Импорт файла в массив 2d в java

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 

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

Спасибо!

+0

Вы также можете показать содержимое своего файла? Кажется, у вас что-то не так в файле. Проверьте [InputMismatchException] (http://docs.oracle.com/javase/7/docs/api/java/util/InputMismatchException.html) – klor

+0

Похоже, вы пытаетесь прочитать в double, когда файл содержит что-то еще. Вы пробовали отлаживать свой код или просто добавлять заявления печати, чтобы выяснить, что он пытается прочитать? –

+0

@ user3052882 вы можете показать нам содержимое вашего файла – Tenacious

ответ

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; 
} 
+0

По умолчанию разделитель сканера соответствует пробелу. Таким образом, вы можете выполнять последующие вызовы .next *(), если знаете порядок, в котором они проходят. – klor

1

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

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

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

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

teamList.useLocale(Locale.ENGLISH); 
0

Я играл с кодом и получил его на работу, делая эти изменения:

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++; 
     } 
    } 

} 

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

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

Смежные вопросы