提问人:Rewbert 提问时间:11/29/2014 更新时间:10/21/2023 访问量:29208
“令牌*********的语法错误,此令牌之后应有 annotationName”
"Syntax error on token *********, annotationName expected after this token"
问:
我有两个无法解决的错误,谷歌没有让我清楚地知道问题是什么。 我收到两个编译错误,一个在线
Random random = new Random();
紧跟在 ;,说 { expected。下一个错误位于此行
public void newGame() {
说“令牌 newGame 上的语法错误,注解名称应在此令牌之后”。这是什么意思?我的代码底部有一个额外的 },如果我删除它,编译器(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]);
}
}
}
}
答:
0赞
Mureinik
11/29/2014
#1
问题是第一个 for 循环。在 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
评论
0赞
XoXo
11/29/2014
此外,需要先初始化allCards
2赞
Gabriel Oliveira
11/29/2014
#2
你的第一个循环需要放在类的方法中。如果您希望在创建此类对象时执行该循环,则必须编写如下构造函数方法:
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];
评论
0赞
Rewbert
11/30/2014
很好的答案,既然你这么说,那么为什么它不起作用是完全有道理的。谢谢!
0赞
Pankaj Sharma
10/21/2023
#3
右键单击项目 -> 配置构建路径 -> 库 -> 添加选择执行环境为 JavaSE-11(jre)
评论
for
for(int i = 0; i < im.length; i++)