Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,将文件输入到2D数组_Java_Arrays - Fatal编程技术网

Java,将文件输入到2D数组

Java,将文件输入到2D数组,java,arrays,Java,Arrays,我对Java真的很陌生。我试图从我在eclipse中创建的输入文件中获取值,并试图将它们保存到2D数组中。输入为: 3122379 20-33 1 3-146-6 我可以很好地将它保存到常规数组中,但不管我尝试了什么,我都不知道如何将它保存到上面表单中的2d数组中。我尝试了循环,但它为循环的每次迭代保存了所有12个数字。我试着使用变量,只是像对常规数组那样递增它们,结果什么也没有保存。有关如何执行此操作的任何帮助,请参阅下面的常规数组代码,并将以下内容打印到屏幕: [31,22,23,79,20

我对Java真的很陌生。我试图从我在eclipse中创建的输入文件中获取值,并试图将它们保存到2D数组中。输入为:

3122379

20-33 1

3-146-6

我可以很好地将它保存到常规数组中,但不管我尝试了什么,我都不知道如何将它保存到上面表单中的2d数组中。我尝试了循环,但它为循环的每次迭代保存了所有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) {}           
}
import java.io.*;
导入java.util.array;
导入java.util.StringTokenizer;
公共类数组矩阵x2d{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
如果(args.length==0){
System.err.println(“用法:javasum”);
系统出口(1);
}
试一试{
//int[][]矩阵=新int[3][4];
int MyMat[]=新int[12];
int num=0;
//int行=0;
//int列=0;
BufferedReader br=新的BufferedReader(新文件读取器(args[0]);
弦线;
而((line=br.readLine())!=null){
StringTokenizer st=新的StringTokenizer(行);
而(st.hasMoreTokens()){
int value1=Integer.parseInt(st.nextToken());
MyMat[num]=value1;
num++;
}
}
System.out.println(Arrays.toString(MyMat));
br.close();
}       
捕获(例外e){}
}

}

如果您使用Java 7,您可以将文本文件加载到
列表中。据我所知,这是创建字符串[][]的最短方法

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
}
String[][]根目录;
列表行=Files.readAllLines(path.get(“”),StandardCharsets.UTF_8);

lines.removeAll(Arrays.asList(“,null));// 你可以这样制作你的
矩阵

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

希望我的代码对您有用:

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();
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[][]=新的int[m][n];
for(int i=0;i
谢谢您的帮助。我现在得到以下输出:[[31,22,23,79],null,null]。我可能是打错了什么的,我会试着找到它,但方向肯定是对的。看来你的第二排和第三排都没有建好。啊哈,明白了,非常感谢。只是把我的打印声明放错地方了。非常感谢。您好,我真的很感谢您的帮助,但是我的Java太基础了,我不明白这里发生了什么。谢谢你!您可以尝试调试并观察其工作方式。只有第一行,您就可以输入文件名并获得行列表。第二行删除文件中的所有空行。所以你把你的代码从20行删减到4行,我会试试看,看看它是如何工作的,无论如何我都在努力学习。谢谢