Java 无法访问的代码,如果语句,在tic-tac-toe中?
我正在为我的AP计算机科学课程创建一个tic-tac-toe游戏,到目前为止,它运行没有错误,或者通过简单的修复解决了错误。然而,当我向程序中添加if语句时,它会连续显示一个错误,说明“无法访问代码”。我仍然无法确定原因或如何解决此问题 我使用“魔方”设置游戏,其中每行和对角线设置为一个变量,加起来是15,这是程序决定胜利者的方式 该错误出现在以下if语句中: 如果(topx==15 | | middlex==15 | | bottomx==15 | | leftx==15|| centerx==15 | | rightx==15 | | diag1x==15 | | diag2x==15){ 字符串XWIN=(“X wins!”); g、 抽绳(XWIN,60,50);} 上面的if语句属于x播放器,但是o播放器的if语句也有相同的错误 整个代码如下所示(我为糟糕的注释道歉)Java 无法访问的代码,如果语句,在tic-tac-toe中?,java,compiler-errors,applet,awt,unreachable-code,Java,Compiler Errors,Applet,Awt,Unreachable Code,我正在为我的AP计算机科学课程创建一个tic-tac-toe游戏,到目前为止,它运行没有错误,或者通过简单的修复解决了错误。然而,当我向程序中添加if语句时,它会连续显示一个错误,说明“无法访问代码”。我仍然无法确定原因或如何解决此问题 我使用“魔方”设置游戏,其中每行和对角线设置为一个变量,加起来是15,这是程序决定胜利者的方式 该错误出现在以下if语句中: 如果(topx==15 | | middlex==15 | | bottomx==15 | | leftx==15|| centerx=
public void绘制(图形g){
this.setSize(450430);//设置游戏屏幕大小。
//初始方向
System.out.println(“播放器1(x)先开始,有9个盒子可用。”);
System.out.println(“数字分别对应于方框”);
System.out.println(“1为左上角,2为中上角,3为右上角,依此类推”);
系统输出打印(“玩家1输入x的位置:”);
setBackground(Color.black);//背景色
//分别指定给每个框x和o的列出的变量
int-topx=0;
int middlex=0;
int bottomx=0;
int leftx=0;
int centerx=0;
int rightx=0;
int diag1x=0;
int diag2x=0;
int-topo=0;
int MIDLEO=0;
int-bottomo=0;
int-lefto=0;
int centero=0;
int righto=0;
int diag1o=0;
int=0;
//董事会
g、 setColor(Color.WHITE);
g、 drawRect(50,5025225);
g、 抽绳(125、50、125、275);
g、 抽绳(20050200275);
g、 抽绳(50125275125);
g、 抽绳(50200275200);
//for循环和实现的扫描器
例如(int x=1;x看在上帝的份上,它正好在一个中断之后。中断会迫使代码流结束并离开当前块,因此块中任何在它之后的代码都不会到达。因此编译器正在正确地抱怨。不要这样做
在您的帖子中还有很多其他有问题的代码,包括在绘制方法中使用扫描仪
您应该废弃这段代码,阅读Swing教程和通用Java教程。一方面,您几乎不应该覆盖绘制方法,而是应该覆盖JComponent或JPanel的paintComponent方法。另一方面,这些方法应该仅用于绘制和绘制,并且不应该被扫描仪阻止。这我会冻结你的GUI,让它没用
我会重新组织这个项目
- 我根本不会在GUI程序中使用扫描仪。GUI程序本质上是事件驱动的,而扫描仪类型代码是完全不兼容的线性控制台代码
- 相反,在使用GridLayout的JPanel中保存的JLabel上使用监听器,例如鼠标监听器
- 如果我绘制了任何东西,它将再次出现在JPanel中的paintComponent覆盖中
- 但我会尽量避免画画,而是在我的JLabel中交换包含“X”、“O”或空白图像的图像图标,这取决于它们的状态
编辑:由于您必须使用AWT,因此对REC进行了一些更改:
- 不过,出于同样的原因,不要使用扫描仪
- 仍然使用事件驱动编程,例如附加到标签上的MouseListener
- 如果需要自定义图形,请替代绘制方法
- 同样,这个方法中不应该有程序逻辑和阻塞代码。它应该只用于绘图和绘图
错误与您的if
语句的内容无关;您将if
语句放在break
语句之后,然后放在后续的case
之前——程序执行无法到达该语句。(这就是“无法访问的代码”的含义——一般来说,当您看到错误时,您需要后退一步,查看上下文,并尝试找出哪一组输入应该到达该行-通常,在您尝试找出该行的同时,您将看到为什么它不会发生。)您的中断在条件之前,因此无法到达代码。似乎您在上次中断之后定义了if
;您的开关的。这会将其定义为无法到达的代码。此外,更正您的制表符将有助于表明事情没有正确排列。“显示整个代码…”哇!一种方法213个LOC。这个问题可以简化为一个不超过50个LOC的问题。请以后再这样做。也不是说任何方法通常都不应该超过一个“全屏”。213个LOC太长了!好的。它是学校指定的吗?还有:为什么AWT而不是Swing?请看我的答案,有很多好的理由要回避关于使用AWT组件。--这里有两个问题,我希望您能给出两个答案。
public void paint(Graphics g){
this.setSize(450, 430); //sets the game screen size.
//initial directions
System.out.println("Player 1 (x) goes first. there are 9 boxes available.");
System.out.println("The numbers correspond to the boxes respectively.");
System.out.println("1 being top left, 2 being top center, 3 being top right, and so on.");
System.out.print("PLAYER 1 enter location of x: ");
setBackground( Color.black ); //background color
//listed variables assigned to each box, x and o, respectively
int topx = 0;
int middlex = 0;
int bottomx = 0;
int leftx = 0;
int centerx = 0;
int rightx = 0;
int diag1x = 0;
int diag2x = 0;
int topo = 0;
int middleo = 0;
int bottomo = 0;
int lefto = 0;
int centero = 0;
int righto = 0;
int diag1o = 0;
int diag2o = 0;
//board
g.setColor( Color.WHITE );
g.drawRect(50,50,225,225);
g.drawLine(125, 50, 125, 275);
g.drawLine(200, 50, 200, 275);
g.drawLine(50, 125, 275, 125);
g.drawLine(50, 200, 275, 200);
//for loop and implemented scanner
for (int x = 1; x <= 5; x++) {
g.setColor( Color.CYAN);
Scanner keyboard1 = new Scanner(System.in);
int p1 = keyboard1.nextInt();
System.out.print("PLAYER 2 enter location of o: ");
switch (p1){
case 1:
g.drawLine(75, 75, 100, 100);
g.drawLine(100, 75, 75, 100);
topx += 8;
leftx += 8;
diag1x +=8;
break;
case 2:
g.drawLine(150, 75, 175, 100);
g.drawLine(175, 75, 150, 100);
centerx += 1;
topx += 1;
break;
case 3:
g.drawLine(225, 75, 250, 100);
g.drawLine(250, 75, 225, 100);
rightx += 6;
topx += 6;
diag2x += 6;
break;
case 4:
g.drawLine(75, 150, 100, 175);
g.drawLine(75, 175, 100, 150);
middlex += 3;
leftx += 3;
break;
case 5:
g.drawLine(150, 150, 175, 175);
g.drawLine(150, 175, 175, 150);
diag1x += 5;
diag2x += 5;
middlex += 5;
centerx += 5;
break;
case 6:
g.drawLine(225, 150, 250, 175);
g.drawLine(225, 175, 250, 150);
middlex += 7;
rightx += 7;
break;
case 7:
g.drawLine(75, 225, 100, 250);
g.drawLine(75, 250, 100, 225);
diag2x += 4;
leftx += 4;
bottomx += 4;
break;
case 8:
g.drawLine(150, 225, 175, 250);
g.drawLine(150, 250, 175, 225);
bottomx += 9;
centerx += 9;
break;
case 9:
g.drawLine(225, 225, 250, 250);
g.drawLine(225, 250, 250, 225);
bottomx += 2;
rightx += 2;
diag1x += 2;
break;
if ( topx == 15 || middlex == 15 || bottomx == 15 || leftx == 15 || centerx == 15 || rightx == 15 || diag1x == 15 || diag2x == 15 ) {
String XWIN = ("X wins!");
g.drawString(XWIN, 60, 50);
}
g.setColor( Color.GREEN);
Scanner keyboard2 = new Scanner(System.in);
int p2 = keyboard2.nextInt();
System.out.print("PLAYER 1 enter location of x: ");
switch (p2){
case 1:
g.drawOval(75, 75, 25, 25);
topo += 8;
lefto += 8;
diag1o +=8;
break;
case 2:
g.drawOval(150, 75, 25, 25);
centero += 1;
topo += 1;
break;
case 3:
g.drawOval(225, 75, 25, 25);
righto += 6;
topo += 6;
diag2o += 6;
break;
case 4:
g.drawOval(75, 150, 25, 25);
middleo += 3;
lefto += 3;
break;
case 5:
g.drawOval(150, 150, 25, 25);
diag1o += 5;
diag2o += 5;
middleo += 5;
centero += 5;
break;
case 6:
g.drawOval(225, 150, 25, 25);
middleo += 7;
righto += 7;
break;
case 7:
g.drawOval(75, 225, 25, 25);
diag2o += 4;
lefto += 4;
bottomo += 4;
break;
case 8:
g.drawOval(150, 225, 25, 25);
bottomo += 9;
centero += 9;
break;
case 9:
g.drawOval(225, 225, 25, 25);
bottomo += 2;
righto += 2;
diag1o += 2;
break;
if ( topo == 15 || middleo == 15 || bottomo == 15 || lefto == 15 || centero == 15 || righto == 15 || diag1o == 15 || diag2o == 15 ) {
String OWIN = ("O wins!");
g.drawString(OWIN, 60, 50);
}
default : System.out.println("This is not a valid input. Please enter a number 1 through 9.");
}
}
}
}