Search code examples
javabufferedreadernumberformatexception

NumberFormatException program error


When I run the following program, I get the error:

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)

What does this error mean? And why is this hapening?

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

Solution

  • You're reading a bunch of lines from a file, assuming they are integers and running Integer.parseInt on them. It fails because not all these lines contain integers.

    Instead of reading each line and parsing it as an integer, you might want to try to split up each line using string.split() and string.substring() before using Double.parseDouble on those non-integer parts.