1. ホーム
  2. java

[解決済み] "トークン*****のシンタックスエラー、このトークンの後にannotationNameが期待される"

2022-02-11 21:42:18

質問

私は、解決できない2つのエラーに悩まされています。 2つのコンパイルエラーが発生しました。

Random random = new Random();

の直後に、{ expected. 次のエラーはこの行にあります。

public void newGame() {

トークン newGame で構文エラーです。このトークンの後に annotationName があるはずです" と表示されました。これはどういう意味でしょうか?私のコードの一番下に余分な}がありますが、これを削除すると、コンパイラー(Eclipse)は文句を言います。これを取り除くと、最後の}で}が期待されると言うのです。

正しい方向への助言は歓迎しますが、匙加減はしないでください :) 私は学びたいのです。もし私がどこかでjavaの慣習を破っているならば、それも指摘してください。ありがとうございます。

コード全体

import java.awt.*;
import java.io.*;
import javax.swing.*;
import java.util.Random;

public class Memory {

    File folder = (new File("mypictures"));
    File[] pictures = folder.listFiles();
    ImageIcon im = new ImageIcon();
    Card[] allCards;
    Random random = new Random();

    for(int i = 0; i < im.length; i++) {
        allCards[i] = new Card(new ImageIcon(pictures[i].getPath()));
    }

    public void newGame() {
        int row = Integer.parseInt
                (JOptionPane.showInputDialog("How many rows?"));
        int column = Integer.parseInt
                (JOptionPane.showInputDialog("How many columns?"));

        Card[] game = new Card[row*column];

        for(i = 0; i < game.length; i++) {
            int ranint = random.nextInt(game.length);
            game[i] = allCards[ranint];
            Card c = game[i].copy();
            game[i+game.length/2] = c;
        }

        for(i = 0; i < 5; i++) { // Randomizing a few times.
            Tools.randomOrder(game);
        }

        JFrame jf = new JFrame("Memory");
        jf.setLayout (new GridLayout (row, column));

        for(i = 0; i < game.length; i++) { // Adds the cards to our grid.
            jf.add(game[1]);
        }
    }
}
}

解決方法は?

最初のループは、クラスのメソッドの中に入れる必要があります。そのクラスのオブジェクトが生成されたときにループが実行されるようにしたい場合は、次のようなコンストラクタ・メソッドを記述する必要があります。

public Memory() {
    for(int i = 0; i < im.length; i++) {
        allCards[i] = new Card(new ImageIcon(pictures[i].getPath()));
    }
}

しかし、この方法では配列に値を代入することはできません。 allCards を保持する空の変数に過ぎません。 null . このように変数を初期化する必要があります。

Card [] allCards = new allCards[desiredLength];