繁体   English   中英

从txt文件java扫描仪读取2d数组

[英]reading 2d array from txt file java scanner

我不断得到:

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)

到目前为止,我一直都在尝试使用扫描仪类。 任何帮助表示赞赏。 试图读取2d数组,但它从未完全读取它。 我的input.txt文件是:

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();
    }
}
}

浏览Scanner类中的方法。

特别是, hasXXX()nextXXX()方法是成对出现的。 尽量不要混用那些会使事情变得复杂的方法。 您正在使用nextInt()hasNext()nextLine() 该文档还解释了调用这些方法时的作用。

对于您的情况,如果您愿意使用String.split() ,则方法hasNextLine()nextLine()就足够了。 您可以拆分nextLine()返回的字符串,然后解析整数并将其分配给数组元素。

我认为最好使用ArrayList。 尝试这个

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;
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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