简体   繁体   中英

reading 2d array from txt file java scanner

I keep getting:

java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Driver0.readFile(Driver0.java:38)
at Driver0.main(Driver0.java:18)

Trying to use the scanner class since it's all I know so far. any help appreciated. Trying to read the 2d array but it never reads it fully. My input.txt file is:

3 5

2 3 4 5 10

4 5 2 3 7

-3 -1 0 1 5

import java.io.*;
import java.util.*;
public class Driver0 {
//public static String fileName; // declare so it may be used outside of main
public static int[][] array; // declare as empty until given dimensions
public static int dimensionA, dimensionB; // dimensions used in methods
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("What is the name of the data file?");
    System.out.print("> ");
    String fileName = input.nextLine();
    readFile(fileName);
    String nextCommand = "";
    while (!(nextCommand.equals("quit"))) {
        System.out.println("\nNext command");
        System.out.print("> ");
        nextCommand = input.nextLine();
        choice (nextCommand);
    }
}
public static void choice(String command) {
    switch (command) {
        case "help": System.out.println("show array\nrows sorted\ncols sorted"+
                    "increase row i by n\nincrease col j by n\nquit\n");
                break;
        default: showArray();
    }
}
public static void readFile(String fileName) {
    try {
        Scanner foo = new Scanner(fileName);
        dimensionA = foo.nextInt();
        dimensionB = foo.nextInt();

        array = new int[dimensionA][dimensionB];
        while (foo.hasNext()) {
            for (int row = 0; row < dimensionA; row++) {
                foo.nextLine();
                for (int column = 0; column < dimensionB; column++) {
                    array[row][column] = foo.nextInt();
                }
            }
        }
        foo.close();
    }
    catch(Exception e) {
        e.printStackTrace(); // displays type of error
    }
}
public static void showArray() {
    for (int ro = 0; ro < dimensionA; ro++) {
        for (int col = 0; col < dimensionB; col++) {
            System.out.print(array[ro][col]);
        }
        System.out.println();
    }
}
}

Go through methods in the Scanner class.

Specially, the hasXXX() and nextXXX() methods, they come in pairs. Try not to mix-match those methods which will make things complicated. You are using nextInt() , hasNext() , and nextLine() . The docs also explains what these methods do when you invoke them.

For your case, the methods hasNextLine() and nextLine() will be enough if you are willing to use the String.split() . You can split the string returned by nextLine() and parse the integer and assign it to the array element.

I think it's better to use ArrayList. try this

package readfile;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Read {

public static void main(String[] args) throws FileNotFoundException, IOException {

    String line = null;
    List<String[]> list = new ArrayList<String[]>();
    BufferedReader reader = new BufferedReader(new FileReader("/home/user/My_Folder/read_me.txt"));
    while ((line = reader.readLine())!=null) { 
        list.add(getArray(line));
    }        
    reader.close();

    for (String[] stringArr : list) {
        for(String str : stringArr){
            System.out.print(str+" ");
        }
        System.out.println("");
    }

}

private static String[] getArray(String s){
    String[] array = s.split("\\s");
    return array;
}

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM