我还没有完全掌握如何从包含两行数字的许多txt文件中的一个填充两个数组。这是我到目前为止的代码,
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);
}
}
}
程序编译并运行但我真的不知道输出的内容以及如何开始排序和合并它们。我是否需要另一个while循环或for循环来单独遍历元素? 文本文件是values1.txt具有以下值。
1 25 38 43 57 58 71
2 3 4 26 41 42 59 60 61
答案 0 :(得分:1)
你有三大问题:
首先,听起来您想要将第一行读入arr1
,将第二行读入arr2
,这不是您正在做的事情:
//a = b = 0
while(inputFile.hasNext() && a < arr1.length && b < arr2.length){
arr1[a] = inputFile.nextInt();
arr2[b] = inputFile.nextInt();
a++;
b++;
}
这是取第一个值(在第一行)并将其放在arr1[a]
中,第二个值放在(在第一行)并将其放在{{1}中等等,所以你最终得到:
arr2[b]
你需要将输入文件分成几行,然后遍历它们 - 我们将回到那里。
第二:我上面代码中的arrA = [1, 38, 57, 71, 3, 26, 42]
arrB = [25, 43, 58, 2, 4, 41, 59, 0, 0]
不在你的身上 - a和b都是0,所以每次迭代你只需要在同一个插槽中放置两个新值,替换以前的。因此,正如您编写的那样,您的代码会生成:
a++; b++
第三,arr1 = [60, 0, 0, 0, 0, 0, 0]
arr2 = [61, 0, 0, 0, 0, 0, 0, 0, 0]
条件是一团糟:请参阅@ SergeBallesta对一个确定问题的答案,还有其他潜在问题。作为通用的经验法则,只要您发现自己在一段时间/条件下写while
两次以上,请停下来并仔细思考是否可以将其分解: < em>编写简单/干净的代码!=写尽可能少的行
在这种情况下,解决它与解决我们的第一个问题密切相关。
练习的目的是让你知道如何做到这一点,所以我要把它留给你。如果您遇到困难/不理解我所说的话,请随时发表评论。
另外:&&
为您提供了一种打印数组内容的便捷方法。如果你将这两行放在Arrays.toString()
:
main
每次运行时,您都会看到最终输出。
答案 1 :(得分:0)
它会中断,因为你总共有9 + 7 = 16个整数。使用循环,您将读取2 * 8而arr1
的大小仅为7.因此,您只能读取14个整数,并且不会对它们产生正确的影响。
你需要一次读一个完整的一行到一个字符串,在空格上分割该字符串("\s+"
见javadoc String.split()
...)并将每个项目转换为一个int来存储它在你的阵列中。