【问题标题】:Java random array of numbersJava随机数字数组
【发布时间】:2011-05-02 21:36:39
【问题描述】:

我正在尝试创建一个范围从 0 到 9 的随机数数组,其中的变量是 kickerNumbers。虽然说不兼容的类型,但我得到一个编译错误。我已经尝试将(int) 更改为[int] 就像它说的那样,但我认为这无论如何都不是正确的,而且它不是。有没有另一种写法?我需要它作为前四个数字是 0-9,但第五个数字需要更小的数字,例如 0-4。对于 0-4,我只是把它变成了一个完全不同的变量。那是一个不错的选择吗?这是给出错误的行的示例代码。

import java.util.Scanner;
import java.util.InputMismatchException;
public class CashBallTest
{
    public static void main(String[]args)
    {
        Scanner keyboard = new Scanner(System.in);
        int kicker;
        int[] kickerNumbers = (int)(Math.random()*0+9);
        int kickerPowerball=(int)(Math.random()*0+4);

错误显示:

\CashBallTest.java:9: incompatible types
    found   : int
    required: int[]
    int[] kickerNumbers = (int)(Math.random()*0+9);

我也尝试将 (int) 更改为 (int[]) 但它说它是一个不可转换的类型,当它需要是一个 int[] 时计算为一个 double 但我看不出它从哪里得到 double 类型.

【问题讨论】:

    标签: java arrays random


    【解决方案1】:
    int[] kickerNumbers = (int)(Math.random()*0+9);
    

    您不能将int 分配给int[]

    假设这应该是一个数字,它可能是这样的

    int[] kickerNumbers = new int[5];
    for(int i = 0; i < kickerNumbers.length; i++) {
        kickerNumbers[i] = (int)(Math.random()*0+9);
    }
    

    在不相关的说明中,您为什么要乘以 Math.random()*0?这对我来说似乎很愚蠢。如果你想要 1 到 10 的数字,我会这样做:Math.random()*10 + 1

    【讨论】:

    • +1 用于指出 random() 问题。 (并在我面前发帖:))
    【解决方案2】:
    1. 这是一个 int 数组:int[] kickerNumbers 但您将其分配为 int(不是数组)(int)(Math.random()*0+9);
    2. 您的随机数将返回 9。总是(运算符优先级)。

    像这样创建一个数组:int[] kickerNumbers = int[numberOfPlayers] 并在循环中分配数字,或者使用 ArrayList 与 0-9 之间的数字并调用 shuffle

    【讨论】:

      【解决方案3】:

      简单地说:

      java.util.Random r = new java.util.Random();
      int[] kickerNumbers = r.ints(0, 10).limit(5).toArray(); // 5 times 0...9
      

      然后改变最后一个元素:

      kickerNumbers[4] = r.nextInt(5);
      

      【讨论】:

        【解决方案4】:

        使用您自己的随机数生成器可能会起作用,因此您可以使用 nextInt 并避免一些混淆。

        Random r = new Random();
        // four values [0, 9]
        int[] kickerNumbers={r.nextInt(10), r.nextInt(10), r.nextInt(10), r.nextInt(10)};
        // one value [0, 4]
        int kickerPowerball = r.nextInt(5);
        

        【讨论】:

        • +1 表示r.nextInt()。比Math.random()的游戏更好
        • 而且速度更快,但这并不重要。 ;)
        【解决方案5】:

        您正在尝试将 int 分配给导致错误的数组。

        您想要做什么使用循环遍历您的数组并为其分配随机值,您提到您希望您的数字介于 0-9 和 0-4 之间,以下代码将为您提供该结果:

        public static void main(String[] args) {
            int[] kickerNumbers = new int[4];
            for (int i = 0; i < kickerNumbers.length; i++) {
                kickerNumbers[i] = randomRange(0,9);
            }
            int kickerPowerball = randomRange(0,4);
        }
        public static int randomRange(int min, int max) {
            return (int) Math.round(((Math.random() * (max - min)) + min));
        }
        

        上面的代码包含一个方法,它将返回给定参数之间的整数。

        【讨论】:

          【解决方案6】:
          import java.util.Random;
          public class CashBallTest {
          
              public static void main (String[]args){
          
                  int[] kickerNumbers= new int[5];
                  for (int i=0;i<4;i++)
                      kickerNumbers[i]=randomize(9);
                      kickerNumbers[4]=randomize(4);
          
                  for (int i:kickerNumbers)
                      System.out.println(i);
              }
          
              public static int  randomize(int k){
                  Random rand=new Random();
                  return rand.nextInt(k);
              }
          }
          

          假设你不关心重复。

          对不起。我还没有读过彼得的回答......它是一样的。

          【讨论】:

          • 你也应该每次都得到new Random()
          猜你喜欢
          • 2019-07-26
          • 1970-01-01
          • 1970-01-01
          • 2021-06-26
          • 1970-01-01
          • 2014-05-13
          • 1970-01-01
          • 1970-01-01
          • 2019-03-23
          相关资源
          最近更新 更多