2012-05-31 1 views
2

У меня есть текстовый файл (файл.txt). Этот файл загружается внутри сканера.Scanner.nextDouble: файл txt правильно загружен, но происходит «InputMismatchException»

В файлах есть разные строки, и в каждой строке есть два удвоения и одно целое число, деленное на пробелы.

Как это:

1.0 1.2 2 
0.9 1.0 10 
50.4 9.2 20 

Мне нужно выполнить три массива.

Каждый массив соответствует столбцу . Что-то вроде:

double[] x = {1.0,0.9,50.4} 
double[] y = {1.2,1.0,9.2} 
double[] z = {2,10,20} 

Я пытался этому, используя этот код:

double x[]= new double [3]; 
double y[]= new double [3]; 
double z[]= new double [3]; 

File f = new File(ClassLoader.getSystemResource(file.txt).toURI()); 
Scanner sc = new Scanner(f); 

for (int i=0;j<3;i++){ 
    x[i] = sc.nextDouble(); 
    y[i] = sc.nextDouble(); 
    z[i] = sc.nextDouble(); 
} 

но когда первый nextDouble() выполняется в "неперехваченное" (java.util.InputMismatchException) исключение.

Что я делаю неправильно?

Благодарим за любые намеки.

+1

Печать 'sc.next()' и посмотреть, что сканер пытается разобрать как двойной. – aioobe

+0

Я пробовал. И действительно, в 4 итерациях он принимает три числа первой строки и первое число четвертой строки так точно, как и должно быть, но когда я пытаюсь сделать то же самое с nextDouble(), он терпит неудачу в Итерации FIRST – dragonmnl

ответ

1

Если sc.next() работает на вас, вам необходимо проанализировать выходные данные, как это указано в типе String и, следовательно, InputMismatchException.

попробовать:

for (int i=0;j<3;i++) { 
    String s; 
    s = sc.next(); 
    x[i] = Double.parseDouble(s); 
    s = sc.next(); 
    y[i] = Double.parseDouble(s); 
    s = sc.next(); 
    z[i] = Double.parseDouble(s); 
} 
+0

Но next() возвращает только ОДИН (из трех) удвоений одной строки. И он говорит, что методы split (или split) не существуют – dragonmnl

+0

ну, если он возвращает один из трех двухместных за раз, то вам не нужно их разбить, просто проанализируйте и используйте их. –

+0

ok У меня есть некоторые проблемы с индексами, но теперь это работает. Спасибо! – dragonmnl

2

Является ли это что-то связано с Locale вы разборе doubles?

Цитирование из http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

Экземпляр этого класса способен чисел сканирования в стандартных форматах, а также в форматах локализации сканера. Исходным языком сканера является значение, возвращаемое методом Locale.getDefault(); он может быть изменен с помощью метода useLocale(java.util.Locale).

Так, например, это может помочь:

scanner.useLocale(Locale.ENGLISH); 
+0

Да! Большое вам спасибо за этот ответ !!! – vikingsteve

+0

@vikingsteve приветствую :-) Я рад, что смогу помочь вам. –

0

При выполнении программы, попробуйте запятую вместо точки:

1,0 1,2 2 

0,9 1,0 10 

50,4 9,2 20 
Смежные вопросы