我遇到两个奇怪的错误
新错误是当我告诉 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 中,您可以打破 while
、for
、do...while
和 switch
语句,但不是 if
语句。这没有什么特别好的理由 - 这主要是历史原因 - 但编译器确实强制执行它。
在上述三个控制结构中,for
、while
和 do...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/