0

我编写了一个方法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

4

0 回答 0