Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用特定条件(点位置、窗口宽度)将for循环更改为while循环?_Java - Fatal编程技术网

Java 如何使用特定条件(点位置、窗口宽度)将for循环更改为while循环?

Java 如何使用特定条件(点位置、窗口宽度)将for循环更改为while循环?,java,Java,我正在创建一个点竞争计划,我需要帮助改变一个for循环到一个while循环使用某些条件。这些条件是点的x坐标和窗口的宽度。我想要它,这样无论我选择什么宽度来制作窗口,程序都知道点何时完成 代码如下: createWindows(); // rise in steps of 10 pixels, cruise in steps of 5 pixels final int hStep = 28; final int vStep

我正在创建一个点竞争计划,我需要帮助改变一个for循环到一个while循环使用某些条件。这些条件是点的x坐标和窗口的宽度。我想要它,这样无论我选择什么宽度来制作窗口,程序都知道点何时完成

代码如下:

    createWindows();
                // rise in steps of 10 pixels, cruise in steps of 5 pixels
        final int hStep = 28;
        final int vStep = 0;

        Dot connectMe = new Dot(100, 270, 70, Color.yellow, dotCourse);
        for(int i=0; i<20; i++)
        {
            connectMe.moveDot(connectMe.getX(), connectMe.getY()-vStep);  // Move up by vStep
            Thread.sleep(1);
        }
        for(int i=0; i<30;i++)
        {
            connectMe.moveDot(connectMe.getX() + hStep, connectMe.getY());  // Move right by hStep
            Thread.sleep(200);

        boolean finish = (GWINDOW_WIDTH-60) <= connectMe.getX();
            if (finish) {
        }
            System.out.println("Did the dot finish? : " + finish); 
        }

}
createWindows();
//以10像素的步幅上升,以5像素的步幅巡航
最终积分hStep=28;
最终int-vStep=0;
点连接=新点(100、270、70,颜色为黄色,点路线);

对于(int i=0;i而言,您的错误在于始终以相同的量移动点:30(循环)x28(像素)。无论窗口有多宽或每一步有多远,您始终移动860像素

因此,你必须调整你的步长或步长。改变步长会改变速度,因此这可能不是你想要的。相反,你必须采取更多或更少的步骤,直到达到点。正如我在评论中所说,自然语言算法准确地翻译为java:

/* As long as           */ while (
/* the window width     */   GWINDOW_WIDTH-60
/* is larger than       */   >
/* the dot's x position */   connectMe.getX()) {
/* move the dot         */     connectMe.moveDot(connectMe.getX() + hStep, connectMe.getY());
/* one step.            */     Thread.sleep(200);
/*                      */ }

inti=0;while(我试过什么?你知道如何做
while
循环吗?提示:当
for
循环执行时:
for(X;Y;Z){}
那么等价的
while
循环是:
X;while(Y){Z;}
这非常简单。自然语言算法是:只要窗口宽度大于圆点的x位置,将圆点移动一步。“现在,您使用Java语法编写这个精确的算法,它几乎可以逐字翻译。如果您不知道while循环是如何编写的,请查看。如果您的实现有问题,请发布它并寻求更多帮助。@MalteHartwig我输入了‘int I=0;while”(iYes,这与您上面所展示的基本相同,只是用while循环替换for。但是它仍然执行固定的30个步骤,而不是“只要点还没有到达终点”。您需要更改while循环的停止条件,并且您甚至在上面的代码中已经有了正确的条件。