Ошибка в коде - Имена классов принимаются только в случае аннотации - PullRequest
0 голосов
/ 02 июня 2010

У меня есть вопрос по поводу моего кода, который использует метод разбиения 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

Есть идеи относительно причины?

Ответы [ 2 ]

3 голосов
/ 02 июня 2010

Вы, кажется, перевели:

do repeat stmt
until A[ j ] ≤ x;

в

do {
    stmt;
} while (A[j] >= x);

Это не правильно. Сравнение, противоположное ≤, будет>, а не ≥. Следовательно, ваше сравнение при переводе с «до» на «пока» будет использовать> такой как while (A[j] > x);.

Другие ошибки в вашей возможной домашней работе аналогичны, и я призываю вас тщательно продумать каждый перевод самостоятельно.

1 голос
/ 02 июня 2010

После переформатирования вашего вопроса я теперь вижу то, что вы задали изначально. Ответ на ваш вопрос находится в документации Java

В вашем случае вам нужно использовать 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...