0

我对Java真的很陌生。我正在尝试从我在 eclipse 中创建的输入文件中获取值,并尝试将它们保存到二维数组中。输入是:

31 22 23 79

20 -33 33 1

3 -1 46 -6

我可以很好地将它保存到常规数组中,但无论我尝试什么,我都无法弄清楚如何让它以上面的形式保存到二维数组中。我尝试了 for 循环,但它为循环的每次迭代保存了所有 12 个数字。我尝试使用变量并像常规数组一样增加它们,但它什么也没保存。任何有关如何做到这一点的帮助表示赞赏,常规数组的代码如下,将以下内容打印到屏幕上:

[31、22、23、79、20、-33、33、1、3、-1、46、-6]

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

public class ArrayMatrix2d {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    if (args.length == 0){
        System.err.println("Usage: java Sum <filename>");
        System.exit(1);
    }

    try {
        //int[][] matrix = new int[3][4];
        int MyMat[] = new int[12];
        int num = 0;

        //int row = 0;
        //int column = 0;
        BufferedReader br = new BufferedReader(new FileReader(args[0]));
        String line;
        while((line = br.readLine()) != null) {
            StringTokenizer st = new StringTokenizer (line);
            while (st.hasMoreTokens()){
                int value1 = Integer.parseInt(st.nextToken());
                MyMat[num] = value1;
                num++;              
            }
        }
        System.out.println(Arrays.toString(MyMat));
        br.close();
    }       
    catch(Exception e) {}           
}

}

4

3 回答 3

1

如果您使用 Java 7,您可以将文本文件加载到List. 据我所知,这是创建 String[][] 的最短方法

String[][] root;

List<String> lines = Files.readAllLines(Paths.get("<your filename>"), StandardCharsets.UTF_8);

lines.removeAll(Arrays.asList("", null)); // <- remove empty lines

root = new String[lines.size()][]; 

for(int i =0; i<lines.size(); i++){
  root[i] = lines.get(i).split("[ ]+"); // you can use just split(" ") but who knows how many empty spaces
}

现在你已经填充root[][]

希望对你有帮助

于 2013-10-05T11:31:23.867 回答
1

你可以matrix这样

int[][] matrix=new int[3][]; //if the number of columns is variable

int[][] matrix=new int[3][4]; //if you know the number of columns

在循环中你得到

 int i=0;
 while((line = br.readLine()) != null) {
        StringTokenizer st = new StringTokenizer (line);
        int num=0;
        //the next line is when you need to calculate the number of columns
        //otherwise leave blank
        matrix[i]=new int[st.countTokens()];
        while (st.hasMoreTokens()){
            int value1 = Integer.parseInt(st.nextToken());
            matrix[i][num] = value1;
            num++;              
        }
        i++;
 }
于 2013-10-05T11:32:01.450 回答
0

希望我的代码对您有用:

java.util.Scanner scan = new java.util.Scanner(System.in);
int [] ar= Arrays.stream(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int m=ar[0];
int n=ar[1];
int myArray[][]=new int[m][n];
for (int i = 0; i < m; i++)
    myArray[i]= Arrays.stream(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
于 2017-09-21T10:20:53.610 回答