【问题标题】:Java Randomize - (minus) and + (plus)Java 随机化 -(减号)和 +(加号)
【发布时间】:2015-04-18 12:00:41
【问题描述】:

有没有办法随机化一个加号或减号字符?我有一个程序,其中一个精灵在屏幕上移动,当你点击它时,它会重新出现在不同的地方。我也希望它移动的方向也是随机的。目前我只能将其设置为从左向右移动+,或从右向左移动-。

private int x = random.nextInt(150); 
    private int y = random.nextInt(500);    
    private int xSpeed = random.nextInt(10);//Horizontal increment of position (speed)
    private int ySpeed = random.nextInt(10);// Vertical increment of position (speed)

public void update() {
        x = x +- xSpeed;
        y = y +- ySpeed;
}

【问题讨论】:

    标签: java random sprite


    【解决方案1】:

    你总是可以做一个变体:

    xSpeed = xSpeed * ( random.nextBoolean() ? 1 : -1 );
    ySpeed = ySpeed * ( random.nextBoolean() ? 1 : -1 );
    

    【讨论】:

      【解决方案2】:

      a - b 也是 a + b * (-1),所以你可以随机化 -1 或 1 并乘以 xSpeed / ySpeed。

      【讨论】:

        【解决方案3】:

        考虑有两种可能性:加号或减号。 因此,只需生成一个具有 2 种可能结果的随机数,并使用它来确定符号(加号或减号):

        public int getRandomSign() {
            Random rand = new Random();
            if(rand.nextBoolean())
                return -1;
            else
                return 1;
        }
        
        public void update() {
            x = x + xSpeed * getRandomSign();
            y = y + ySpeed * getRandomSign();
        }
        

        【讨论】:

          【解决方案4】:

          xSpeed = random.nextInt(10) 替换为xSpeed = random.nextInt(19)-9

          【讨论】:

            【解决方案5】:

            许多人建议将速度乘以 1 或 -1,但有一种更简单的方法可以避免乘法,这可能会更有效一些。可能不足以对性能产生显着影响,但我想我还是把它扔在那里。

            public void update() {
                x = x + (random.nextBoolean() ? xSpeed : -xSpeed);
                y = y + (random.nextBoolean() ? ySpeed : -ySpeed);
            }
            

            【讨论】:

              【解决方案6】:

              random.nextInt(1)*2-1

              random.nextInt(1) 会给你 0 或 1。Times 2 给你 0 或 2。减一给你 -1 或 1

              【讨论】:

                【解决方案7】:

                在其他答案中,您有在两个值之间随机选择的有效解决方案。我向您建议的是一种在任意数量的值之间进行选择的方法:

                private static Random rd = new Random();
                public static <T> T randomItem(List<T> elts) {
                    return elts.get(rd.nextInt(elts.size());
                }
                

                【讨论】:

                • 这不是 OP 所要求的。发帖者需要随机加减,而不是检索随机数。
                • 它是直接适用的......而且更通用。假设他扩展了方向的数量,而不是重复代码行,他可以在列表中添加更多选项
                猜你喜欢
                • 2014-02-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-12-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多