我对使用Hoare分区方法的代码有疑问。
这是伪代码:(如果不正确,请更正)
HOARE-PARTITION ( A, p, r)
1 x ← A[ p]
2 i ← p−1
3 j ← r +1
4 while TRUE
5 do repeat j ← j − 1
6 until A[ j ] ≤ x
7 do repeat i ← i + 1
8 until A[i] ≥ x
9 if i < j
10 then exchange A[i] ↔ A[ j ]
11 else return j
我的代码:
public class Hoare {
public static int partition(int a[],int p,int r) {
int x = a[p];
int i = p - 1;
int j = r + 1;
while (true) {
do
{
j = j - 1;
} while(a[j] >= x);
do
{
i = i + 1;
} while(a[i] <= x);
if (i < j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
} else {
return j;
}
}
}
public static void main(String[]args) {
int a[] = {13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 21};
partition(a, 0, a.length-1);
}
}
错误是:
error: Class names, 'Hoare', are only accepted if annotation
processing is explicitly requested
1 error
关于原因的任何想法?
答案 0 :(得分:3)
你似乎翻译了:
do repeat stmt
until A[ j ] ≤ x;
到
do {
stmt;
} while (A[j] >= x);
这不正确。与≤相反的比较将是>,而不是≥。因此,从“直到”转换为“同时”时的比较将使用&gt;例如while (A[j] > x);
。
您可能的家庭作业中的其他错误是相似的,我鼓励您自己仔细考虑每个翻译。
答案 1 :(得分:1)
重新格式化问题后,我现在看到您最初询问的内容。您可以在Java Documentation
中找到问题的答案在您的情况下,您需要使用javac Hoare.java
进行编译。
Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested
If you receive this error, you forgot to include the .java suffix when compiling the program. Remember, the command is javac HelloWorldApp.java not javac HelloWorldApp.