我有两个奇怪的错误
新错误是当我告诉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){}
}
}
答案 0 :(得分:5)
if (x > 35) {...}
不一个循环它是一个声明。
for (int x = 0; x <= 35; x++) {...}
是一个循环。
while( x <= 35 ) {...}
是一个循环。
do {...} while ( x <= 35 )
是一个循环。
取出repaint()
号码,这是多余的。
你真的需要去点击你之前问题“接受”的答案上的CheckMark,如果你没有,人们就会停止回答你。
答案 1 :(得分:5)
关于你的第一个问题,你在这里遇到编译错误的原因是:
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
的原因是因为Java的switch
语句基于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
语句一段时间,然后决定使用第二个 if
语句是否运行其余的代码循环。
希望这有帮助!
答案 2 :(得分:1)
Java不会运行,因为在循环外有一个break语句,但是我把它放在循环中。
不,你把它放在一个if
语句中,这不是一个循环。即使它有效,break
在那里也没用,语句只会被执行一次。
答案 3 :(得分:0)
if-else块不是循环,这是你的问题。您的第二个错误可能是因为未声明x和y,至少在您向我们展示的代码中没有声明。
答案 4 :(得分:0)
在第59行, IF 块中有中断语句。这没有意义。删除它,你的程序很好。
答案 5 :(得分:0)
感谢你的建议。
我移动repaint();从paint类到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();
}
}
}
你可以关闭这个帖子。