Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问的代码,如果语句,在tic-tac-toe中?_Java_Compiler Errors_Applet_Awt_Unreachable Code - Fatal编程技术网

Java 无法访问的代码,如果语句,在tic-tac-toe中?

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=

我正在为我的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语句也有相同的错误

整个代码如下所示(我为糟糕的注释道歉)

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.");

                }

            }

        }
    }