首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不工作的代码(事件驱动编程)

不工作的代码(事件驱动编程)
EN

Stack Overflow用户
提问于 2015-08-25 23:54:34
回答 2查看 64关注 0票数 1

因此,我正在进行以下工作:

创建一个圆圈并将其放入窗格中,当用户单击窗格内时,显示以下消息之一:如果用户在圆圈内的某个地方单击,则打印“在圆圈内”,否则打印“圈子外”。

问题是,无论我在哪里点击,我都会得到“在圆圈内”。

我知道解决这个问题的其他方法,但我想知道为什么我的方法行不通。

代码语言:javascript
复制
public class Exercise15_12 extends Application {

    @Override
    public void start(Stage primaryStage) {

        Text text = new Text(30,10,"");

        Circle circle = new Circle(50);
        circle.setCenterX(100);
        circle.setCenterY(60);
        Pane pane = new Pane();
        pane.getChildren().add(text);
        pane.getChildren().add(circle);

        pane.setOnMouseClicked(e -> {
            double x = e.getX();
            double y = e.getY();

            if ((x <= 150 || x >=50) && (y >= 10 || y <= 110)) {
                text.setText("inside the circle!");
            }
            else {
                text.setText("outside the circle");
            }       
        });

        Scene scene = new Scene(pane,400,400);
        primaryStage.setScene(scene);
        primaryStage.show();
        pane.requestFocus();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-26 00:03:16

看看你的逻辑:

代码语言:javascript
复制
if ((x <= 150 || x >=50) && (y >= 10 || y <= 110)) {

这将永远是正确的:

X总是小于150或大于50并且

Y总是大于10或小于110。

第一个解决方案:使用&&代替||

但是第二个问题:请注意,这将定义一个矩形,而不是一个圆,为此,您需要使用一个小的几何学,使用一个圆的方程。

票数 4
EN

Stack Overflow用户

发布于 2015-08-26 00:04:30

问题在于您的if语句。

代码语言:javascript
复制
if ((x <= 150 || x >=50) && (y >= 10 || y <= 110))

如果|| (或)操作符的任一操作数或两个操作数都为真,则返回true。现在,考虑一下您作为操作数使用的表达式:如果x <= 150false,那么x必须至少为150,但这始终意味着x >= 50将是true,因为x> 150 > 50。类似地,对于y表达式,任何数字都不能同时小于10和大于110,因此(y >= 10 || y <= 110)始终是true。因此,if块中的代码总是被执行,而不是else代码。你可能打算这么做:

代码语言:javascript
复制
if ((x <= 150 && x >=50) && (y >= 10 && y <= 110))

通过在两个表达式中将|| (或)替换为&& (和),整个((x <= 150 && x >=50) && (y >= 10 && y <= 110))只能在x大于或等于50和小于或等于150且y在10至110之间时才计算为true

但是,即使是该代码也不能正确地解决这个问题:注意,当单击"inside the circle!"时,圆圈外的一些点,但圆圈周围的矩形内的一些点,将导致"inside the circle!"。为了更准确地捕捉一个圆的形状,您需要从它的方程式中开发一个更好的不等式,来确定何时点在圆圈内。例如,您可以尝试下面的语句(在查找之前尝试自己找出它):

if (((x - 100) * (x - 100) + (y - 60) * (y - 60)) <= 50 * 50)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32215936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档