Java无法运行,因为循环外有一个break语句,但我把它放在循环内

标签 java loops applet return

我遇到两个奇怪的错误

新错误是当我告诉 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){}

    }

}

最佳答案

关于您的第一个问题,您在此处收到编译器错误的原因:

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

    repaint();
    break;  
}

这个 break 语句实际上并不在循环中。在 Java 中,您可以打破 whilefordo...whileswitch 语句,但不是 if 语句。这没有什么特别好的理由 - 这主要是历史原因 - 但编译器确实强制执行它。

在上述三个控制结构中,forwhiledo...while 被称为循环,因为它们执行代码可能很多次。本例中的 break 语句是一种表达“请中止当前循环的执行;我不想再运行它”的方式。它的反面是继续,意思是“请转到此循环的下一次迭代。”

您可以突破 switch 的原因是 Java 的 switch 语句基于 C 编程语言的 switch 版本,其中标签是“失败的”。在此上下文中,break 表示“我已完成执行此特定标签中要执行的所有代码;请让我退出此语句。”有趣的是,您可以中断切换,但不能继续

但是,您无法break 跳出if 语句。这没有任何高级原因,事实上,语言设计者可以很容易地允许这种行为意味着“停止执行 if 语句的这一部分”。我认为他们选择不这样做的原因是 if 语句在每个处理程序的末尾都有一种“隐式 break”。例如,如果你写

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

执行A后,控制流会立即跳转到C,而不是跳转到else处理程序。

如果您想在 if 语句中间模拟 break,您可以执行以下操作:

if (condition()) {
     // code

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

这里的想法是,您运行 if 语句一段时间,然后使用第二个 if 语句决定是否运行循环中的其余代码。

希望这有帮助!

关于Java无法运行,因为循环外有一个break语句,但我把它放在循环内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097138/

相关文章:

c++ - 字母输入运行无限循环

java - 用于启用/禁用 JAVA 断点的 eclipse 快捷方式

java - Wicket - maven 依赖项 - 找不到符号 [错误] 符号 : class PageParameters

Java GUI - 嵌套面板

java - 如何使用小程序同时播放音频文件和显示图像?

java - 在小程序中序列化对象

java - 在 Eclipse 中使用 ControlP5 进行处理会导致按键时出现 IllegalArgumentException

java - SQL 命令在 servlet 中未正确结束

java - 在 Java 中使用循环的数字模式

Matlab,if条件不循环