"Синтаксическая ошибка на токене *********, annotationName, ожидаемое после этого токена"
У меня есть две ошибки, которые я не могу решить, Google не дал мне четкого представления о проблеме. Я получаю две компиляционные ошибки: одну на линии
Random random = new Random();
сразу после;, говоря {ожидаемый. Следующая ошибка в этой строке
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];
Проблема заключается в первом для цикла. В Java вы не можете просто поместить код под класс - он должен быть в методе, конструкторе или анонимном блоке. Поскольку это похоже на код инициализации, конструктор кажется уместным:
public class Memory {
File folder = (new File("mypictures"));
File[] pictures = folder.listFiles();
ImageIcon im = new ImageIcon();
Card[] allCards;
Random random = new Random();
/** Defaylt constructor to initialize allCards: */
public Memory() {
allCards = new Crad[im.length];
for(int i = 0; i < im.length; i++) {
allCards[i] = new Card(new ImageIcon(pictures[i].getPath()));
}
}
// rest of the class