2013-09-24 5 views
-1

Когда я запускаю следующую программу, я получаю ошибку:NumberFormatException

Exception in thread "main" java.lang.NumberFormatException: For input string: "[-52.06907251530153, -90.45811476077165]" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:492) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at code.readFile(code.java:31) 
    at code.main(code.java:22) 

Что означает эта ошибка? И почему это происходит?

import java.io.*; 
import java.util.Arrays; 

public class code 
{ 
    public static void main (String [] args) throws IOException 
    { 

    int points = 10000, dimension = 2, lengthA = 100;//int variables are declared and initialized 

    PrintWriter fileOut = new PrintWriter (new FileWriter ("arrayPoints.txt")); 

    double length [] = new double [dimension];//array for length is declared 
    double coordinate [][] = new double [points][dimension];//coordinate array is declared 

    writeTofile(length, coordinate, points, dimension, lengthA);//calls writeTofile method 

    for (int i = 0; i < points; i++){ 
     fileOut.println(Arrays.toString(coordinate[i]));//converts array to string and prints to file 
         }//end for 
     fileOut.close();//writes to file 
     readFile();// calls readFile method 

    }//end main method 
    public static void readFile() throws IOException 
    { 
    BufferedReader readFile = new BufferedReader (new FileReader ("arrayPoints.txt")); 

    int readTimes [] = new int [10000]; 
    for(int i = 0; i < 10000; i++){ 
    readTimes [i] = Integer.parseInt(readFile.readLine()); 
    System.out.print(readTimes [i]); 
    }//end for 

    } 

    public static void writeTofile (double length[], double coordinate[][], int points, int dimension, int lengthA) 
    { 
     for(int z = 0; z < dimension; z++){//fills the length array with the the set value of lengthA 
     length[z] = lengthA; 
     }//end for 

    for(int x = 0; x < points; x++){//runs 1000 times to print 1000 data points 
     for (int y = 0; y < dimension; y++){//runs 2 times to print an x and y coordinate 
     coordinate [x][y]= (2 *Math.random() - 1) * length[y];// finds a random number in the range and assiigns it to the coordinate array 
     }//end for 
    }//end for 
    }//writeTofile method 
}//code 
+0

Какова остальная часть трассировки стека (строки после строк ошибок, которые вы опубликовали)? –

+0

это полный один: java.lang.NumberFormatException: Для ввода строки: "[37,34351500606841, -30,837458930508465]" \t в java.lang.NumberFormatException.forInputString (Unknown Source) в java.lang.Integer.parseInt (Неизвестный источник) \t на java.lang.Integer.parseInt (Unknown Source) \t в J5_3_MultiDimArray.readFile (J5_3_MultiDimArray.java:42) \t в J5_3_MultiDimArray.main (J5_3_MultiDimArray.java:33) \t в sun.reflect. NativeMethodAccessorImpl.invoke0 (родной метод) \t at sun.reflect.NativeMethodAccessorImpl.invoke (Неизвестный источник) \t at sun.reflect.DelegatingMethodAccessorImpl.invoke (Неизвестный источник) – user481710

ответ

0

Вы читаете кучу строк из файла, при условии, что они являются целыми числами и работает Integer.parseInt на них. Он терпит неудачу, потому что не все эти строки содержат целые числа.

Вместо чтения каждой строки и разбора его как целое число, вы можете попытаться разделить каждую линию, используя string.split() и string.substring() перед использованием Double.parseDouble на этих нецелые части.

+0

Я не знаком с string.split() и string.substring() Как это работает? Как это выглядит? – user481710

+0

[Этот струнный учебник] (http://home.cogeco.ca/~ve3ll/jatutor7.htm) должен вам помочь. –

+0

спасибо за ссылку – user481710

0

Поскольку [37.34351500606841, -30.837458930508465] НЕ Integer.
Это, кажется, случается здесь: Integer.parseInt(readFile.readLine());

0

В сканировании трассировки стека, который вы опубликовали, «37.34351500606841» не является целым. Трудно сказать из вашей неполной статистики стека, что именно происходит, но, если вы вызываете Integer.parseInt по этому значению, вы получите исключение NumberFormatException.

+0

Нет, он читает полную строку с readln(), затем пытается проанализировать ее с помощью Integer.parseInt(), поэтому ведущая открытая скобка не оценивается сама по себе. Кроме того, Integer.parseInt выбрасывает NFE для любого значения, отличного от целого. –