使用随机方法生成字符串的前n个成员

问题描述 投票:-1回答:1

我有这个代码:

    Scanner input = new Scanner(System.in);
    Random rand = new Random();
    System.out.println("Input how much elements you want ");
    int sizeofArray = input.nextInt();

    System.out.println("-------------------------------------------------");

    int arr[] = new int[sizeofArray * 2];
    for (int i = 1; i <= 3; i++) { //setting random values for the first three elements
        arr[i] = rand.nextInt();

        for (int j = i; j < arr.length; j++) {//
            arr[j] = arr[i] * 2; //multiply the first three elements with two and get other elements
        }
    }
    Arrays.sort(arr);
    System.out.println("Sorted array: " + Arrays.toString(arr));
}
}

我认为我的代码很好用,但是当我运行程序时,他给了我一些元素的值0。例子[214134,0,12341234,12341234,1234421,12431234]为什么他给我零?

如果我在某处犯了错误,这就是我想要的:

我需要输入数组的大小,那么大小我乘以2,我得到数组的最终大小。然后,我需要设置数组的前n个元素的随机值,然后其余的应该通过将现有元素乘以2来实现

java
1个回答
0
投票

OP的原始问题是循环定义(从[1]而不是[0]开始)。后续问题是关于设定其他价值观。以下是关于输入3的简单示例的工作。算法允许指定值的初始位置数(在OP的问题中为3)以及是否使用随机值(纯随机不能简化验证)。

还有其他问题:

  • 使用纯随机.nextInt()可以很容易地产生一个数字,当doubled溢出整数的大小时;没有说明如何处理这种情况。
  • 在我看来,当用户输入大小为“7”时,不会指定发生什么。如果随机条目的数量固定为3,则生成[0]-[2]的值,并且[3]- [5] are 2 times the values of [i - 3] , but the values for [6] - [13]`(因为数组的大小会是2 *输入的大小,所以14)尚未指定。因此,这段代码很高兴地将先前的值乘以2,这几乎肯定会溢出(见上文)。
  • OP的代码没有对输入的值进行错误检查,因此应予以解决。

码:

public static void main (String[] args) throws java.lang.Exception
{
    // gather the number of inputs, here we will use 3, but should
    //  be collected from the user
    int sizeofArray = 3;

    // create the array
    int[] arr = new int[sizeofArray * 2];
    fillValues(arr, 3, false);
    Arrays.sort(arr);
    // this should produce [1, 2, 2, 3, 4, 6], so can check the basic
    //  algo
    System.out.println("Sorted array: " + Arrays.toString(arr));

    // here it is with random values
    arr = new int[sizeofArray * 2];
    fillValues(arr, 3, true);
    Arrays.sort(arr);
    System.out.println("Sorted array: " + Arrays.toString(arr));
}

public static void fillValues(int[] arr, int numRand, boolean useRand) 
{
    if (arr.length < numRand) {
        throw new IllegalArgumentException("not enough elements");
    }
   // first three are random, if desired; hard to debug when so
   Random rand = new Random();

   if (useRand) {
    for (int i = 0; i < numRand; ++i) {
      arr[i] = rand.nextInt();
    }
   }
   else {
    for (int i = 0; i < numRand; ++i) {
        arr[i] = (i +  1);
    }
   }

   // now multiple the rest of the array by 2
   for (int j = 0; j < arr.length - numRand; ++j) {
     arr[j + numRand] = arr[j] * 2;
   }
}

样本输出:

排序数组:[1,2,2,3,4,6] 排序数组:[ - 1836605528,-791724580,-395862290,551049021,1102098042,1229180884]

在线示例:https://ideone.com/j9ja2b

© www.soinside.com 2019 - 2024. All rights reserved.