-2

次のJavaコードをコンパイルすると、illegal start of typeエラーclass, interface or enum expectedがスローされます。

次のコードの Percolation クラス内で、別のクラスに属する WeightedQuickUnionUF データ型が宣言されています。WeightedQuickUnionUF クラスは、現在の作業ディレクトリ内の「algs4.jar」という名前の jar ファイルに格納されます。

コードを数回チェックしましたが、欠陥を見つけることができず、完全にスタックしました。

コードは次のとおりです。

public class Percolation{
    public static Percolation(int n){
        boolean[][] A=new boolean[n][n];
    }
    int i,j;
    WeightedQuickUnionUF WQUF=new WeightedQuickUnionUF[n*n+2];
    for(i=1;i<=n;i++)
    {
        WQUF.union(0,i);
    }
    for (i=n*n-n+1;i<=n*n;i++)
    {
        WQUF.union(n*n+1,i);
    }
    do {
        i=StdRandom.uniform(n-1)+1;
        j=StdRandom.uniform(n-1)+1;
    } while(A[i][j]!=0)
    open(i,j);
    private static int xyto1D(int x,int y){
        return (n*x+y);
    }
    public static void open(int i,int j){
        A[i][j]=1;
        if(A[i-1][j]==1) {WQUF.union(xyto1D(i-1,j),xyto1D(i,j))};
        if(A[i+1][j]==1) {WQUF.union(xyto1D(i+1,j),xyto1D(i,j))};
        if(A[i][j-1]==1) {WQUF.union(xyto1D(i,j-1),xyto1D(i,j))};
        if(A[i][j+1]==1) {WQUF.union(xyto1D(i,j+1),xyto1D(i,j))};
    }
    public static boolean isOpen(int x,int y){
        return (A[x][y]==1);
    }
    public static boolean isFull(int x,int y){
        return (WQUF.connected(xyto1D(x,y),0));
    }
    public static boolean percolates(){
        for (i=n*n-n+1;i<=n*n;i++)
        {
            if ((isFull(i))&&(isOpen(i))) return TRUE;
        }
        return FALSE;
    }
}

コンパイル中に次のエラーが発生します。

35 errors found:

File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: illegal start of type
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: <identifier> expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: ';' expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: <identifier> expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: <identifier> expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: <identifier> expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: illegal start of type
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 7]
Error: <identifier> expected
File: C:\Users\Administrator\algs4\Percolati
on.java  
[line: 8]
Error: ';' expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 9]
Error: illegal start of type
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 9]
Error: illegal start of type
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 9]
Error: <identifier> expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 11]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 11]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 11]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 14]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 17]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 18]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 20]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 22]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 23]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 25]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 26]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 27]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 28]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 29]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 30]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 32]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 33]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 35]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 36]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 37]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 37]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 40]
Error: class, interface, or enum expected
File: C:\Users\Administrator\algs4\Percolation.java  
[line: 42]
Error: class, interface, or enum expected
4

4 に答える 4

2

4行目でコンストラクターを閉じます。すべてのエラーは、この結果です。

    public static Percolation(int n){
        boolean[][] A=new boolean[n][n];
    } // <<--- here

インデントに取り組んでください。私の記憶が正しければ、EclipseとNetBeansの両方にある種の自動インデントがあります。適切なインデントを使用すれば、簡単に自分でそれを捉えることができます。

于 2013-02-16T15:44:23.747 に答える
1
 do {
i=StdRandom.uniform(n-1)+1;
j=StdRandom.uniform(n-1)+1;
} while(A[i][j]!=0)

whileステートメントの最後にセミコロンを付ける必要があります。

do {
i=StdRandom.uniform(n-1)+1;
j=StdRandom.uniform(n-1)+1;
} while(A[i][j]!=0);

コードには多くの問題があるようです。EclipseIDEを使用することをお勧めします。

于 2013-02-16T15:47:12.457 に答える
1

Javaでは、すべての実行可能コード(初期化を除く)をブロック(静的または関数)内に配置する必要があります。

ただし、ファイルの7行目にforは、クラスの本体にあるループがあり、これは無効です。コンストラクターなどの関数の中に入れてください。

実際、投稿したコードにはもう1つの問題があります。許可されていないコンストラクターstaticを宣言しました。コンストラクターを静的にすることはできません。

public static Percolation(int n) {  // illegal
boolean[][] A = new boolean[n][n];
}

7行目から始まるコードがコンストラクターの一部であると仮定すると、これが機能するはずのコードです。

public class Percolation {
    public Percolation(int n) {
    boolean[][] A = new boolean[n][n];

        int i, j;
        WeightedQuickUnionUF WQUF = new WeightedQuickUnionUF[n * n + 2];


        for(i=1;i<=n;i++){
           WQUF.union(0,i);
        }

        for (i=n*n-n+1;i<=n*n;i++){
            WQUF.union(n*n+1,i);
        }

        do{
            i=StdRandom.uniform(n-1)+1;
            j=StdRandom.uniform(n-1)+1;
        } while(A[i][j]!=0); //add this semicolon as well.

        open(i,j);
    }

    private static int xyto1D(int x, int y) {
    return (n * x + y);
    }

    public static void open(int i,int j){
        A[i][j]=1;
        if(A[i-1][j]==1) {WQUF.union(xyto1D(i-1,j),xyto1D(i,j))};
         if(A[i+1][j]==1) {WQUF.union(xyto1D(i+1,j),xyto1D(i,j))};
          if(A[i][j-1]==1) {WQUF.union(xyto1D(i,j-1),xyto1D(i,j))};
           if(A[i][j+1]==1) {WQUF.union(xyto1D(i,j+1),xyto1D(i,j))};
    }

    public static boolean isOpen(int x, int y) {
    return (A[x][y] == 1);
    }

    public static boolean isFull(int x, int y) {
    return (WQUF.connected(xyto1D(x, y), 0));
    }

    public static boolean percolates() {
    for (i = n * n - n + 1; i <= n * n; i++) {
        if ((isFull(i)) && (isOpen(i)))
        return TRUE;
    }
    return FALSE;
    }
}
于 2013-02-16T15:47:42.210 に答える
1

また、問題はここにあります:(他の多くの構文エラーは別として、Javaの構文規則に違反している場所とすべてを知ることができるように、行ごとにデバッグします)

WeightedQuickUnionUF WQUF=new WeightedQuickUnionUF[n*n+2];

次のように変更する必要があります。

WeightedQuickUnionUF WQUF=new WeightedQuickUnionUF(n*n+2);
于 2013-02-16T15:46:27.573 に答える