Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 int数组_Java_Multidimensional Array - Fatal编程技术网

使用java文件中的值生成2d int数组

使用java文件中的值生成2d int数组,java,multidimensional-array,Java,Multidimensional Array,我在将包含整数的文件存储到具有这些值的2d int数组中时遇到问题。该文件具有以下格式: 11936 1 4 212 1 2 732 2 9 111 2 1 66 2 12 29 2 19 14 2 17 65 3 2 17 3 11 38 3 14 122 3 17 211 3 1 390 3 18 78 3 9 11 4

我在将包含整数的文件存储到具有这些值的2d int数组中时遇到问题。该文件具有以下格式:

11936
1   4     212
1   2     732
2   9     111
2   1      66
2  12      29 
2  19      14
2  17      65
3   2      17
3  11      38
3  14     122
3  17     211
3   1     390
3  18      78
3   9      11
4   3     273  
4   5      29   
4  12      42 
5   4     122
5  16      12
请注意,某些行上有一些尾随空格。您可以签出完整的文件

这就是我目前所拥有的。我读了文件,把每一行放在一个数组列表中。我认为这会更容易,因为这样我就可以解析出整数并将它们放入2d数组中,但我一直遇到问题。有什么建议吗

private void readRoadFile()
{
    String line = null;
    try
    {
        FileReader fr = new FileReader("road.dat");
        BufferedReader br = new BufferedReader(fr);
        while((line = br.readLine()) != null)
        {
            roadInfo.add(line);
        }
        br.close();
    } catch(FileNotFoundException e)
    {
        System.out.println("File does not exist");
    } catch(IOException e)
    {
        System.out.println("Error reading file");
    }
}

您应该解析字符串并将arraylist转换为数组:

    List<int[]> roadInfo = new ArrayList<>();

    try (BufferedReader reader = new BufferedReader(new FileReader("road.dat"))) {

        for (String line = reader.readLine(); line != null; line = reader.readLine()) {

            String[] split = line.split("\t"); // or \\s+
            int[] numbers = new int[split.length];

            for (int i = 0; i < split.length; i++) {
                numbers[i] = Integer.parseInt(split[i].trim());
            }

            roadInfo.add(numbers);
        }

    } catch (IOException e) {
        throw new RuntimeException(e);
    }

    int[][] twoDArray = roadInfo.toArray(new int[roadInfo.size()][]);
List roadInfo=new ArrayList();
try(BufferedReader=newbufferedreader(newfilereader(“road.dat”)){
for(String line=reader.readLine();line!=null;line=reader.readLine()){
String[]split=line.split(“\t”);//或\\s+
int[]number=新int[split.length];
对于(int i=0;i
您应该解析字符串并将arraylist转换为数组:

    List<int[]> roadInfo = new ArrayList<>();

    try (BufferedReader reader = new BufferedReader(new FileReader("road.dat"))) {

        for (String line = reader.readLine(); line != null; line = reader.readLine()) {

            String[] split = line.split("\t"); // or \\s+
            int[] numbers = new int[split.length];

            for (int i = 0; i < split.length; i++) {
                numbers[i] = Integer.parseInt(split[i].trim());
            }

            roadInfo.add(numbers);
        }

    } catch (IOException e) {
        throw new RuntimeException(e);
    }

    int[][] twoDArray = roadInfo.toArray(new int[roadInfo.size()][]);
List roadInfo=new ArrayList();
try(BufferedReader=newbufferedreader(newfilereader(“road.dat”)){
for(String line=reader.readLine();line!=null;line=reader.readLine()){
String[]split=line.split(“\t”);//或\\s+
int[]number=新int[split.length];
对于(int i=0;i
您可以使用以下解决方案—它使用现代Java 8流简化数据流

@Override
public void run()
{
    List<List<Integer>> result = new ArrayList<>();
    try (FileInputStream fileInputStream = new FileInputStream("stackoverflow-q-34096490.txt");
         InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
         BufferedReader bufferedReader = new BufferedReader(inputStreamReader))
    {
        for (String line = bufferedReader.readLine(); line != null; line = bufferedReader.readLine())
            result.add(Arrays.stream(line.split("\\s+")).filter(s -> !s.isEmpty()).map(Integer::parseInt).collect(Collectors.toList()));
    } catch (IOException ioe)
    {
        System.err.println("Read failure!");
        ioe.printStackTrace();
    }

    // use result
    System.out.println(result);
}
@覆盖
公开募捐
{
列表结果=新建ArrayList();
try(FileInputStream FileInputStream=newfileinputstream(“stackoverflow-q-34096490.txt”);
InputStreamReader InputStreamReader=新的InputStreamReader(fileInputStream,StandardCharsets.UTF_8);
BufferedReader BufferedReader=新的BufferedReader(inputStreamReader))
{
对于(字符串line=bufferedReader.readLine();line!=null;line=bufferedReader.readLine())
结果.add(Arrays.stream(line.split(\\s+)).filter(s->!s.isEmpty()).map(Integer::parseInt).collect(Collectors.toList());
}捕获(ioe异常ioe)
{
System.err.println(“读取失败!”);
ioe.printStackTrace();
}
//使用结果
系统输出打印项次(结果);
}

您可以使用以下解决方案—它使用现代Java 8流简化数据流

@Override
public void run()
{
    List<List<Integer>> result = new ArrayList<>();
    try (FileInputStream fileInputStream = new FileInputStream("stackoverflow-q-34096490.txt");
         InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
         BufferedReader bufferedReader = new BufferedReader(inputStreamReader))
    {
        for (String line = bufferedReader.readLine(); line != null; line = bufferedReader.readLine())
            result.add(Arrays.stream(line.split("\\s+")).filter(s -> !s.isEmpty()).map(Integer::parseInt).collect(Collectors.toList()));
    } catch (IOException ioe)
    {
        System.err.println("Read failure!");
        ioe.printStackTrace();
    }

    // use result
    System.out.println(result);
}
@覆盖
公开募捐
{
列表结果=新建ArrayList();
try(FileInputStream FileInputStream=newfileinputstream(“stackoverflow-q-34096490.txt”);
InputStreamReader InputStreamReader=新的InputStreamReader(fileInputStream,StandardCharsets.UTF_8);
BufferedReader BufferedReader=新的BufferedReader(inputStreamReader))
{
对于(字符串line=bufferedReader.readLine();line!=null;line=bufferedReader.readLine())
结果.add(Arrays.stream(line.split(\\s+)).filter(s->!s.isEmpty()).map(Integer::parseInt).collect(Collectors.toList());
}捕获(ioe异常ioe)
{
System.err.println(“读取失败!”);
ioe.printStackTrace();
}
//使用结果
系统输出打印项次(结果);
}

什么是“我有问题”?道路信息的类型是什么?也许解析
会有帮助(如果您有强制转换异常)。我的问题是我不确定如何将信息放入2d int数组。roadInfo是一个字符串数组列表@JulianL。也许你可以在问题的代码块中用整数发布你的文件,这会使答案更简单。我附加的图像是文件的一部分。数字的格式与确切的间距相同。无论如何,我都会发布这个文件@randers00“我有问题”是什么意思?道路信息的类型是什么?也许解析
会有帮助(如果您有强制转换异常)。我的问题是我不确定如何将信息放入2d int数组。roadInfo是一个字符串数组列表@JulianL。也许你可以在问题的代码块中用整数发布你的文件,这会使答案更简单。我附加的图像是文件的一部分。数字的格式与确切的间距相同。无论如何,我都会在@RAnders00发布文件