"Синтаксическая ошибка на токене *********, annotationName, ожидаемое после этого токена"

113
11

У меня есть две ошибки, которые я не могу решить, 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]);
}
}
}
}

спросил(а) 2014-11-28T20:17:00+03:00 6 лет, 2 месяца назад
1
Решение
73

Ваш первый цикл должен быть помещен внутри метода класса. Если вы хотите, чтобы этот цикл выполнялся при создании объекта такого класса, вы должны написать такой конструктор, как это:

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];

ответил(а) 2014-11-28T20:51:00+03:00 6 лет, 2 месяца назад
43

Проблема заключается в первом для цикла. В 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

ответил(а) 2014-11-28T20:30:00+03:00 6 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема