我正在尝试读取整数文件,这些整数将被排序,然后输出到另一个文件中。除了在终端中输入文件外,它可以做任何事情。我不知道为什么,我已经包含了整个代码,并且注释部分是似乎不起作用的部分(因为当我将数组硬编码到代码中时它工作正常)。提前谢谢。
class Quicksort {
public void qSort(int[] a, int p, int r) {
if (p < r) {
int q = Partition(a, p, r);
qSort(a, p, q - 1);
qSort(a, q + 1, r);
}
}
private static int Partition(int[] A, int p, int r) {
int x = A[p];
System.out.println(x + " ");
int i = p;
int j = r;
int temp = 0;
while (true) {
while (A[j] > x) {
j--;
}
while (A[i] < x) {
i++;
}
if (i < j) {
temp = A[j];
A[j] = A[i];
A[i] = temp;
} else {
return j;
}
}
}
}
public class QuickSortTest {
public static void main(String[] args) throws IOException {
long time1 = System.nanoTime();
Quicksort qsort = new Quicksort();
// ArrayList<Integer> dataReadIn = new ArrayList();
// FileReader fileToBeRead = new FileReader("test.txt");
// Scanner src = new Scanner(fileToBeRead);
// src.useDelimiter("[,\\s*]");
// int p = 0;
// while (src.hasNext())
// {
// if (src.hasNext())
// {
// dataReadIn.add(src.nextInt());
// System.out.println(p);
// p++;
// }
// else {
// break;
// }
// }
//
// int[] array = new int[dataReadIn.size()];
// for(int a = 0; a < array.length; a++)
// {
// array[a] = dataReadIn.get(a);
// }
int[] array = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 26, 28 };
int length = array.length;
System.out.println(length);
System.out.println("Pivot Element: ");
qsort.qSort(array, 0, length - 1);
PrintWriter out = new PrintWriter(new FileWriter("OutputArray"));
for (int i = 0; i < array.length; i++) {
out.println(array[i] + " ");
}
out.close();
long time2 = System.nanoTime();
long time = (time2 - time1) / 1000;
System.out.println("Total time: " + time + "ms");
}
}
答案 0 :(得分:0)
根本原因是代码找不到您的文件。
您的问题有两种解决方案:
答案 1 :(得分:0)
我非常确定 *
在正则表达式[]
中不起作用(“不起作用”我的意思是它被视为实际角色,不是1或更多)(假设你的意思是1或更多的空白字符)。您可以将*
放在外面:(匹配一个或多个空白字符或逗号)
src.useDelimiter("[,\\s]+");
或执行以下操作:(匹配逗号或一个或多个空白字符)
src.useDelimiter("(,|\\s+)");
我不完全确定以上任何一种都能正常工作,使用时可能更简单:(一个或多个非数字字符)
src.useDelimiter("[^0-9]+");
注意我将*
更改为+
,否则扫描程序将匹配长度为0的字符串,并且可能会逐位返回,而不是整数。
此外,您的while循环有点过于复杂。这会更简单:
int p = 0;
while (src.hasNext())
{
dataReadIn.add(src.nextInt());
System.out.println(p++);
}