我有这个代码:
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来实现
OP的原始问题是循环定义(从[1]
而不是[0]
开始)。后续问题是关于设定其他价值观。以下是关于输入3的简单示例的工作。算法允许指定值的初始位置数(在OP的问题中为3)以及是否使用随机值(纯随机不能简化验证)。
还有其他问题:
.nextInt()
可以很容易地产生一个数字,当doubled溢出整数的大小时;没有说明如何处理这种情况。[0]
-[2]
的值,并且[3]
- [5] are 2 times the values of
[i - 3] , but the values for
[6] -
[13]`(因为数组的大小会是2 *输入的大小,所以14)尚未指定。因此,这段代码很高兴地将先前的值乘以2,这几乎肯定会溢出(见上文)。码:
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]