Java не будет работать, потому что есть оператор break вне цикла, но он у меня внутри цикла - PullRequest
0 голосов
/ 24 февраля 2011

У меня две странные ошибки

Новая ошибка, когда я говорю java нарисовать строку, которая отображает координаты x и y, это не так.

public void paint (Graphics g)
{
    super.paint (g);

   //System.out.println ("Boolean: " + this.closeDoors);


    g.drawString("("+x+","+y+")",x,y);
}

Ссылка на мою программу, если вы ее скомпилируете.http://hotfile.com/dl/107032853/c81d927/Pigment.java.html

Это моя полная программа

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.Graphics;

/**
 *
 * @author George Beazer
 */
public class Pigment extends JApplet 
{
    boolean closeDoors;
    private int x = 0;
    private int y = 0;


    public static void main(String [] args)
    {
            Pigment stuff = new Pigment();
    }
    public Pigment()

    {

        setBackground (Color.blue);
    }

    @Override
    public void init()
    {
         setLayout(new FlowLayout());
         addMouseListener(new MyMouseListener());
    }
    @Override
    public void paint (Graphics g)
    {
        super.paint (g);

       //System.out.println ("Boolean: " + this.closeDoors);


        g.drawString("("+x+","+y+")",x,y);
         if (x > 35)

            {
                            g.drawLine (35, 50, 570, 50);
                g.drawLine (35, 50, 250, 0);
                g.drawLine (250, 0, 570, 50);
                g.drawRect (50, 50, 500, 350);
                g.fillRect (100, 75, 80, 80);
                g.fillRect (400, 75, 80, 80);
                g.fillRect (240, 200, 125, 200);


            }

        else
            {        
            g.drawLine (35, 50, 570, 50);
            g.drawLine (35, 50, 250, 0);
            g.drawLine (250, 0, 570, 50);
            g.drawLine (180, 120, 100, 120);
            g.drawLine (400, 120, 480, 120);
            g.drawLine (140, 75, 140, 160);
            g.drawLine (450, 75, 450, 160);
            g.drawRect (50, 50, 500, 350);
            g.drawRect (100, 75, 80, 80);
            g.drawRect (400, 75, 80, 80);
            g.drawRect (240, 200, 125, 200);
            g.drawOval (330,280, 20, 20);
            }


    }
    private class MyMouseListener implements MouseListener
    {
        public void mouseClicked (MouseEvent e)
        {
            x = e.getX();
            y = e.getY();

        }

        public void mouseEntered (MouseEvent e)
        {


        }
        public void mouseExited(MouseEvent e){}
        public void mousePressed (MouseEvent e){

        }
        public void mouseReleased (MouseEvent e){}

    }

}

Ответы [ 6 ]

5 голосов
/ 24 февраля 2011

Что касается вашего первого вопроса, причина, по которой вы получаете ошибку компилятора здесь:

if (x > 35)
{
    g.drawLine (35, 50, 570, 50);
    g.drawLine (35, 50, 250, 0);

    repaint();
    break;  
}

В том, что этот оператор break на самом деле не находится в цикле.В Java вы можете использовать операторы while, for, do...while и switch, но не операторы if.Для этого нет особой причины - она ​​в основном историческая - но компилятор действительно применяет ее.

Из трех вышеупомянутых управляющих структур for, while и do...while упоминаются какциклы, потому что они выполняют код потенциально много раз.Оператор break в этом случае является способом сказать: «Пожалуйста, прервите выполнение текущего цикла; я больше не хочу его запускать».Его противоположность - continue, что означает «перейдите к следующей итерации этого цикла».

Причина, по которой вы можете выйти из switch, заключается в том, что оператор switch в Java основан на Cверсия языка программирования switch, в которой метки "проваливаются".В этом контексте break означает «Я завершил выполнение всего кода, который хочу выполнить в этой конкретной метке; пожалуйста, вытащите меня из этого утверждения».Интересно, что вы можете break из switch, но вы не можете continue.

Однако вы не можете break из if заявления.Для этого нет высокоуровневой причины, и на самом деле разработчики языка с такой же легкостью могли бы позволить такому поведению означать «прекратить выполнение этой части оператора if».Я думаю, что причина, по которой они решили не делать этого, состоит в том, что операторы if имеют своего рода «неявный break» в конце каждого обработчика.Например, если вы напишите

if (condition()) {
    // A
} else {
    // B
}
// C

Затем, после выполнения A, поток управления немедленно переключит вас на C, а не на обработчик else.

Если вы хотите смоделировать break из середины оператора if, вы можете сделать что-то вроде этого:

if (condition()) {
     // code

     if (someOtherCondition()) {
          // more code
     }
}

Идея состоит в том, что вы запускаете оператор ifв течение некоторого времени затем решите с помощью оператора second if запускать или нет остальную часть кода в цикле.

Надеюсь, это поможет!

5 голосов
/ 24 февраля 2011

if (x > 35) {...} это не цикл это оператор.

for (int x = 0; x <= 35; x++) {...} это цикл.

while( x <= 35 ) {...} это цикл.

do {...} while ( x <= 35 ) - это цикл.

Возьмите repaint() вызов, это избыточно.

Вам действительно нужно пойти и нажать CheckMark на ответы, которые являются«Принято» на ваши предыдущие вопросы, люди перестанут отвечать на ваши вопросы, если вы не .

1 голос
/ 24 февраля 2011

Java не будет работать, потому что есть оператор break вне цикла, но он у меня внутри цикла.

Нет, у вас это внутри оператора if, который не является циклом. Даже если это сработает, break будет бесполезен, инструкция будет выполнена только один раз.

0 голосов
/ 24 февраля 2011

Спасибо Али за ваше предложение.

Я перехожу перекрасить ();метод из класса рисования в класс MyMouseListener.Это прекрасно работало, и Java постоянно перекрашивала изображение,

Глава 14 Задача по программированию на Java номер 2.

Напишите апплет, который рисует дом, показанный слева на рисунке 14-32.Когда пользователь нажимает

на двери или окнах, они должны закрыться.На рисунке справа показан дом с

дверью и закрытыми окнами.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;

/**
 *
 * @author George Beazer
 */
public class Pigment extends JApplet 
{
    public int x = 0;
    public int y = 0;


    public static void main(String [] args)
    {
    }
    public Pigment()

    {
        setBackground (Color.blue);
    }

    @Override
    public void init()
    {
        setLayout(new FlowLayout());

        addMouseListener(new MyMouseListener());
    }
    @Override
    public void paint (Graphics g)
    {
        super.paint (g);

        //System.out.println ("Boolean: " + this.closeDoors);




        if (x > 100 && x < 175 && y < 155 && y > 75)
            {
                g.drawLine (35, 50, 570, 50);
                g.drawLine (35, 50, 250, 0);
                g.drawLine (250, 0, 570, 50);
                g.drawLine (180, 120, 100, 120);
                g.drawLine (400, 120, 480, 120);
                g.drawLine (140, 75, 140, 154);
                g.drawLine (440, 75, 440, 154);
                g.drawRect (50, 50, 500, 350);
                g.drawRect (100, 75, 80, 80);
                g.drawRect (400, 75, 80, 80);
                g.drawRect (240, 200, 125, 200);
                g.drawOval (330,280, 20, 20);
            }
        else if (x > 400 && x < 475 && y < 155 && y > 75)
            {
                g.drawLine (35, 50, 570, 50);
                g.drawLine (35, 50, 250, 0);
                g.drawLine (250, 0, 570, 50);
                g.drawLine (180, 120, 100, 120);
                g.drawLine (400, 120, 480, 120);
                g.drawLine (140, 75, 140, 154);
                g.drawLine (440, 75, 440, 154);
                g.drawRect (50, 50, 500, 350);
                g.drawRect (100, 75, 80, 80);
                g.drawRect (400, 75, 80, 80);
                g.drawRect (240, 200, 125, 200);
                g.drawOval (330,280, 20, 20);
            }

        else if (x > 240 && x < 360 && y < 400 && y > 200)
            {
                g.drawLine (35, 50, 570, 50);
                g.drawLine (35, 50, 250, 0);
                g.drawLine (250, 0, 570, 50);
                g.drawLine (180, 120, 100, 120);
                g.drawLine (400, 120, 480, 120);
                g.drawLine (140, 75, 140, 154);
                g.drawLine (440, 75, 440, 154);
                g.drawRect (50, 50, 500, 350);
                g.drawRect (100, 75, 80, 80);
                g.drawRect (400, 75, 80, 80);
                g.drawRect (240, 200, 125, 200);
                g.drawOval (330,280, 20, 20);
            }
        else
            {        
                g.drawLine (35, 50, 570, 50);
                g.drawLine (35, 50, 250, 0);
                g.drawLine (250, 0, 570, 50);
                g.drawRect (50, 50, 500, 350);
                g.fillRect (100, 75, 80, 80);
                g.fillRect (400, 75, 80, 80);
                g.fillRect (240, 200, 125, 200);
            }

    }

    private class MyMouseListener implements MouseListener
    {

        public void mouseEntered (MouseEvent e)
        {
        }
        public void mouseExited(MouseEvent e)
        {       
        }
        public void mousePressed (MouseEvent e)

        {
        }
        public void mouseReleased (MouseEvent e){}

        public void mouseClicked(MouseEvent e)
        {
            x = e.getX();
            y = e.getY();
            showStatus( "Mouse at (" + x + "," + y + ")" );
            repaint();
        }       
    }
}

Вы можете закрыть эту тему.

0 голосов
/ 24 февраля 2011

в вашей строке 59, есть блок break в блоке IF .что не имеет смысла.Удалите его, и ваша программа готова к работе.

0 голосов
/ 24 февраля 2011

Блок if-else не является циклом, это ваша проблема здесь. Ваша вторая ошибка может быть из-за того, что x и y не объявлены, по крайней мере, в коде, который вы нам показали.

...