Reading double values โ€‹โ€‹from a file

I am trying to read some numbers (double) from a file and store them in an ArrayList and an array (yes, I need both) with the code below:

try {
    Scanner scan = new Scanner(file).useDelimiter("\\s*\\n");

    while(scan.hasNextDouble())
    {
        tmp.add(scan.nextDouble());
    }

    Double[][] tmp2 = new Double[tmp.size()/2][2];
    int tmp3 = 0;
    for(int i = 0; i < tmp.size()/2; i++)
    {
        for(int j = 0; j < 2; j++)
        {
            tmp2[i][j] = tmp.get(tmp3);
            tmp3++;
        }
    }

} catch (FileNotFoundException e1) {
    e1.printStackTrace();
}

}

The file I'm trying to read is:

0.0 0.0
0.023 0.023
0.05 0.05
0.2 0.2
0.5 0.5
0.8 0.8
0.950 0.950
0.977 0.977
1.0 1.0

But itโ€™s good that my code does not work, the hasNextDouble () function does not find anything, what am I doing wrong?

EDIT: OK, so I changed the source code a bit (changed from Object [] [] to Double [] []) and added the insertion values โ€‹โ€‹to the array after they were inserted into the ArrayList, but it still doesn't work - loop " while "is not executed once.

+3
source share
4 answers

I tried to reduce the code to test the scanner itself. The following code works with your data file:

public static void main(String[] args) {
    Scanner scan;
    File file = new File("resources\\scannertester\\data.txt");
    try {
        scan = new Scanner(file);

        while(scan.hasNextDouble())
        {
            System.out.println( scan.nextDouble() );
        }

    } catch (FileNotFoundException e1) {
            e1.printStackTrace();
    }

}

I got the following (expected) output:

0.0
0.0
0.023
0.023
0.05
0.05
0.2
0.2
0.5
0.5
0.8
0.8
0.95
0.95
0.977
0.977
1.0
1.0

, , .

+3

, . .

: ? , ?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Zenzen {

   private static ArrayList<Double> tmp = new ArrayList<Double>();

   private static File file = new File("Zenzen.dat");

   public static void main(String[] args) {

      Scanner scan;
      try {
         scan = new Scanner(file);
         Object[][] tmp2 = new Object[tmp.size() / 2][2];
         int tmp3 = 0;

         while (scan.hasNextDouble()) {
            tmp.add(scan.nextDouble());
            System.out.println(Arrays.deepToString(tmp.toArray())); // debug print
            for (int i = 0; i < tmp.size() / 2; i++) {
               for (int j = 0; j < 2; j++) {
                  tmp2[i][j] = tmp.get(tmp3);
                  tmp3++;
               }
            }
         }

      } catch (FileNotFoundException fnfe) {
         fnfe.printStackTrace();
      }
   }
}

[0.0]
[0.0, 0.0]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Zenzen.main(Zenzen.java:26)
+1

:

scan.useDelimiter("\\s+");

JavaDoc

0

( ), . .

  // use US locale to be able to identify doubles in the string
  scanner.useLocale(Locale.US);

: http://www.tutorialspoint.com/java/util/scanner_nextdouble.htm

0

Source: https://habr.com/ru/post/1724870/


All Articles