java我缺少什么(初学者)

java我缺少什么(初学者),java,Java,我已经写了大部分代码,只是完成起来有点困难。我应该创建一些代码,让一个正方形在绘图板上随机移动,直到它离开屏幕。我可以让它工作一点,但我有一种感觉,这是不正确的。任何帮助都将不胜感激 下面是一个它应该是什么样子的例子 这是我的代码,到目前为止,我最关心的问题是walkingRandom方法 公共类随机行走{ //图纸面板将按尺寸标注尺寸 公共静态最终int DIM=400; //在屏幕中央开始随机漫游 公共静态最终int中心=尺寸/2; //光标应该显示多大? 公共静态最终整数光标尺寸=10

我已经写了大部分代码,只是完成起来有点困难。我应该创建一些代码,让一个正方形在绘图板上随机移动,直到它离开屏幕。我可以让它工作一点,但我有一种感觉,这是不正确的。任何帮助都将不胜感激

下面是一个它应该是什么样子的例子

这是我的代码,到目前为止,我最关心的问题是walkingRandom方法

公共类随机行走{
//图纸面板将按尺寸标注尺寸
公共静态最终int DIM=400;
//在屏幕中央开始随机漫游
公共静态最终int中心=尺寸/2;
//光标应该显示多大?
公共静态最终整数光标尺寸=10;
//光标应在一个位置停留多长时间?
公共静态final int SLEEP_TIME=5;//毫秒
公共静态void main(字符串[]args){
DrawingPanel面板=新的DrawingPanel(尺寸,尺寸);
Random rand=新的Random();
随机抽样(小组,兰德);
}
/**
*在面板上绘制随机漫游。
*你一离开面板就停下来。
*每一个随机步骤只能进行一次
*这些方向中的一个:左、右、上、下。
*@param panel a DrawingPanel用于绘制
*随机行走
*@param rand要创建的Java随机对象
*用于生成随机步骤
*/
公共静态虚空随机漫游(DrawingPanel面板,随机兰德){
Graphics g=panel.getGraphics();
//从面板中央开始
int x=中心;
int y=中心;
//随机向左、向右、向上或向下移动
//直到光标离开屏幕。
while(屏幕上(x,y)){
//用黑色绘制光标
g、 fillRect(x,y,光标尺寸,光标尺寸);
//等等。
面板。睡眠(睡眠时间);
//显示光标的阴影版本
g、 setColor(颜色为灰色);
g、 fillRect(x,y,光标尺寸,光标尺寸);
//为光标选择一个新位置
//*********************************
如果(rand.nextInt()}
您的代码有一些问题。你的问题没有完全澄清,但我认为:

  • 所有方向应具有相同的发生概率
  • 光标只能移动“整步”,即一次只能移动
    cursor\u DIM
    (在您的示例中似乎就是这样)
问题主要出在方法
中,我建议您选择下一个方向,如下所示:

// Choose a new location for the cursor
    int direction = rand.nextInt(4);  //0=left, 1=right, 2=up, 3=down
    if (direction == 0){
        x -= CURSOR_DIM; //The step should be equal to the cursor width, not 1
    } else if (direction == 1){
        x += CURSOR_DIM;
    } else if (direction == 2){
        //you usually subtract to go up, the origin being the upper-left corner
        y -= CURSOR_DIM;
    } else if (direction == 3) {
        y += CURSOR_DIM;
    }
还有两个问题:

  • 在循环的开始和结束处,您将以黑色绘制光标,这是多余的。您可以删除其中一个,并获得相同的结果

  • 在屏幕上的
    方法中,
    x
    y
    等于
    DIM
    的值应返回false,因为图像/数组的边界通常为0到
    DIM
    互斥。您还应该用AND替换
    |
    ,因为光标应该在x和y范围内,而不是OR。
    返回(x=0&&y=0)


  • 希望对您有所帮助

    您的代码有一些问题。你的问题没有完全澄清,但我认为:

    • 所有方向应具有相同的发生概率
    • 光标只能移动“整步”,即一次只能移动
      cursor\u DIM
      (在您的示例中似乎就是这样)
    问题主要出在方法
    中,我建议您选择下一个方向,如下所示:

    // Choose a new location for the cursor
        int direction = rand.nextInt(4);  //0=left, 1=right, 2=up, 3=down
        if (direction == 0){
            x -= CURSOR_DIM; //The step should be equal to the cursor width, not 1
        } else if (direction == 1){
            x += CURSOR_DIM;
        } else if (direction == 2){
            //you usually subtract to go up, the origin being the upper-left corner
            y -= CURSOR_DIM;
        } else if (direction == 3) {
            y += CURSOR_DIM;
        }
    
    还有两个问题:

  • 在循环的开始和结束处,您将以黑色绘制光标,这是多余的。您可以删除其中一个,并获得相同的结果

  • 在屏幕上的
    方法中,
    x
    y
    等于
    DIM
    的值应返回false,因为图像/数组的边界通常为0到
    DIM
    互斥。您还应该用AND替换
    |
    ,因为光标应该在x和y范围内,而不是OR。
    返回(x=0&&y=0)


  • 希望这有帮助

    您的“选择新位置”代码根据随机整数是否满足某些任意条件来决定x和y的递增/递减。我认为这将导致一个非常奇怪的选择分布。你真的不想随机决定增加/减少每一个值,每个值有50/50的机会吗?或者你想要增加/不做任何事情/减少1/3的机会?再想想,对于一个随机行走,你可能想要选择一个固定长度的向量并选择一个随机角度,然后在此基础上计算新的x/y。你认为哪里错了?你的“选择新位置”代码是根据随机整数是否满足某些任意条件来决定x和y的递增/递减。我认为这将导致一个非常奇怪的选择分布。这不是你想要的吗