Java 如何填充2个数组';它来自一个txt文件

Java 如何填充2个数组';它来自一个txt文件,java,arrays,Java,Arrays,我没有完全掌握如何从包含两行数字的许多txt文件中的1个填充两个数组。这是我到目前为止的代码 import java.util.*; import java.io.*; public class Merge { public static void main(String[] args) throws IOException { Scanner scan = new Scanner(System.in); int[] arr1 = new int[7];

我没有完全掌握如何从包含两行数字的许多txt文件中的1个填充两个数组。这是我到目前为止的代码

import java.util.*;
import java.io.*;
public class Merge
{
    public static void main(String[] args) throws IOException
    {
    Scanner scan = new Scanner(System.in);

    int[] arr1 = new int[7];
    int[] arr2 = new int[9];
    int[] arr3 = new int[arr1.length + arr2.length];
    int a = 0, b = 0, c = 0;

    try{
        System.out.print("Enter the filename: ");
        String input = scan.nextLine();

        File file = new File(input);
        Scanner inputFile = new Scanner(file);

        while(inputFile.hasNext() && a < arr1.length && b < arr2.length){
             arr1[a] = inputFile.nextInt();
             arr2[b] = inputFile.nextInt();
             System.out.println(arr1[a] + " " + arr2[b] + " ");
        }
        inputFile.close();
    }
    catch(FileNotFoundException fnfe){
        System.out.println("FILE NOT FOUND");
        System.exit(0);
    }
    }
}  

它将中断,因为您总共有9+7=16个整数。使用循环,您将读取2*8,并且
arr1
的大小仅为7。因此,您将只读取14个整数,不会正确地影响它们


您需要一次将一整行读入一个字符串,将该字符串拆分为空格(
“\s+”
请参阅javadoc of
string.split()
…),然后将每个项转换为int以存储在数组中。

您有三个大问题:

首先,听起来好像您想将第一行读入
arr1
,将第二行读入
arr2
,而这不是您要做的:

//a = b = 0
while(inputFile.hasNext() && a < arr1.length && b < arr2.length){
     arr1[a] = inputFile.nextInt();
     arr2[b] = inputFile.nextInt();
     a++; 
     b++;
}
您需要将输入文件分成几行,然后对它们进行迭代—我们将继续讨论

第二:a++的
a++;b++
在我上面的代码中,不在您的代码中-a和b始终为0,因此每次迭代只需在相同的插槽中放置两个新值,替换以前的值。因此,在编写代码时,您的代码会生成:

arr1 = [60, 0, 0, 0, 0, 0, 0]
arr2 = [61, 0, 0, 0, 0, 0, 0, 0, 0]
第三,那
的情况是一团糟:看@SergeBallesta的答案,有一个明确的问题,还有其他潜在的问题。作为一般的经验法则,任何时候你发现自己在一段时间内写了两次以上的
&&
/如果出现这种情况,停下来仔细想想它是否会被打破:写简单/干净的代码!=尽量少写几行

在这种情况下,分解它与解决第一个问题齐头并进

这个练习的目的是让你知道怎么做,所以我把这个留给你。如果你被卡住了/不明白我说的话,请随时发表评论

另外:
Arrays.toString()
为您提供了一种打印数组内容的简便方法。如果将这两行放在
主文件的底部

System.out.println("arr1:" + Arrays.toString(arr1));
System.out.println("arr2:" + Arrays.toString(arr2));

每次运行时都会看到最终输出

你到底想做什么?您的问题不清楚,请澄清。我想确认我的代码的输出当前是否正确地填充了values1.txt文件中的arr1和arr2。基本上我认为不是,它正在填充数组的第0位的值,增加“a”和“b”变量,例如,while循环中的计数器为++。当我增加计数器时,会出现越界错误,表明只有第一个数组被填充。如果你尝试放置的元素超过它所能容纳的数量,那么大小为7和9的数组将出现越界,在分配之前,请给出一个if条件以检查边界。我在记事本++中更新了计数器的代码,但收到一个越界错误,表明仅填充了第一个数组。现在阅读它,但不发表评论,您的意思是,它将把文本文件的值分解成字符串,然后将整数分别分解成单独的字符串?@user4225587:在您的代码中,arr1的大小为7,arr2的大小为9,第一行有7个项目,第二行有9个项目,我想您希望结果是
arr1[]={1,25,38,43,57,58,71}
arr2={2,3,4,26,41,42,59,60,61}
。如果是这样的话,您应该有效地逐行读取,那么将行拆分为字符串数组,并将单个字符串转换为整数。
arr1 = [60, 0, 0, 0, 0, 0, 0]
arr2 = [61, 0, 0, 0, 0, 0, 0, 0, 0]
System.out.println("arr1:" + Arrays.toString(arr1));
System.out.println("arr2:" + Arrays.toString(arr2));