writefile()
方法应该向给定的输出文件写入给定数组中的所有整数,每行一个。对于这一部分,merge方法应该返回一个足够大的新数组,以容纳前两个数组(a和b)的内容,然后将前两个复制到该数组中,而不考虑顺序。
这是运行程序时放在命令行中的内容:
java Merge1 sorted1.txt sorted2.txt sortedout.txt
这是排序1.text.中的内容
125180138212237306316317337356413422511534577621708717738738846850900
这是排序的2.txt:
334177101157164192235412415484499500533565630667786846851911949968986
我该怎么做?
这是我到目前为止的代码:
import java.io.*;
import java.util.Scanner;
public class Merge1
{
public static void main(String[] args)
{
File sorted1 = new File (args[0]);
File sorted2 = new File (args[1]);
File sortedout = new File (args[2]);
try{
Scanner input = new Scanner(sorted1);
readfile(input);
}
catch (FileNotFoundException e) {
System.out.println("File not found");
}
try{
Scanner input = new Scanner(sorted2);
readfile(input);
}
catch (FileNotFoundException e) {
System.out.println("File not found");
}
try{
Scanner input = new Scanner(sortedout);
readfile(input);
}
catch (FileNotFoundException e) {
System.out.println("File not found");
}
} // end main
static int[] readfile(Scanner input)
{
String num = "";
while(input.hasNextInt())
{
num += input.nextInt() + " ";
}
String[] array = num.split(" ");
int[] list = new int[array.length];
for(int i = 0; i < array.length; i++)
{
list[i] = Integer.parseInt(array[i]);
System.out.println(list[i]);
}
return list;
} // end readfile
static void writefile(PrintStream output, int[] a)
{
output.println(merge(int[] a, int[]b));
} // end writefile
static int[] merge(int[] a, int[] b)
{
int[] answer = new int[a.length + b.length];
int i = 0;
int j = 0;
int k = 0;
while (i < a.length && j < b.length)
{
if (a[i] < b[j])
{
answer[k] = a[i];
k++;
i++;
}
else
{
answer[k] = b[j];
k++;
j++;
}
}
while (i < a.length)
{
answer[k] = a[i];
k++;
i++;
}
while (j < b.length)
{
answer[k] = b[j];
k++;
j++;
}
return answer;
} // end merge
} // end Merge1
总是有System.arraycopy
方法将一个数组复制到另一个数组中,但您也可以使用动态数组,如ArrayList
。System.arraycopy描述
至于write方法,所需要的只是您传递的PrintStream
,为每个值打开一个FileOutputStream
和一个简单的println
。对于排序,有很多排序算法,一些集合已经实现了排序方法。