我编写了一个方法private void merge2way(String f1, String f2, String f3),它读取 2 个文件名并返回一个合并文件。我想使用此方法编写一个私有 void 合并( int n )方法,该方法采用先前排序的文件数并应用该 merge2way。我已经为数组递归地完成了它,但我在这里迷路了,因为我还认为我必须考虑文件数是偶数还是奇数。
这是我的 merge2way 方法。如果有人可以提供帮助,我将不胜感激!
private void merge2way(String f1, String f2, String f3){
try{
Scanner file1 = new Scanner(new File(f1));
Scanner file2 = new Scanner(new File(f2));
PrintWriter out = new PrintWriter(new File(f3));
int n1 = 0, n2 = 0 ;
int [] arr1, arr2, arr3 ;
while (file1.hasNext()){
n1 ++;
file1.nextInt() ;
}
while (file2.hasNext()) {
n2 ++;
file2.nextInt() ;
}
arr1 = new int [n1] ; arr2 = new int [n2] ; arr3 = new int [n1+n2] ;
file1 = new Scanner(new File(f1));
file2 = new Scanner(new File(f2));
for ( int i = 0 ; i < n1 ; i++ )
arr1[i] = file1.nextInt() ;
for ( int i = 0 ; i < n2 ; i++ )
arr2 [i] = file2.nextInt() ;
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (arr1[i] <= arr2[j]) {
arr3[k] = arr1[i];
i++;
}
else {
arr3[k] = arr2[j];
j++;
}
k++;
}
while (i < n1) {
arr3[k] = arr1[i];
i++;
k++;
}
while (j < n2) {
arr3[k] = arr2[j];
j++;
k++;
}
for (int w = 0 ; w < n1+n2 ; w++)
out.printf("%5d ", arr3[w] );
out.close() ;
file1.close();
file2.close();
}catch (Exception e){ System.out.printf("\nOoops! Read Exception: %s", e);}
} // 结束merge2way