找到随机数组的最小值时,我遇到了一个小问题。对于最小的数字,我总是得到0。最大的数字似乎没问题。我也收到了错误的索引编号。
当前代码:
public class RandomArray {
public static void main(String[] args)
{
int indexHigh = 0;
int indexLow = 0;
int max = 0;
int min = 0;
int[] randArray = new int[10];
for(int i = 0; i < randArray.length; i++)
{
randArray[i] = RandomMethod.randomInt(1,1000);
System.out.print(randArray[i] + " ");
System.out.println(" ");
//Max & Min
if (randArray[i] > max)
max = randArray[i];
indexHigh = i;
if (randArray[i] < min)
min = randArray[i];
indexLow = i;
}
System.out.println("The highest minimum for the December is: " + min + " at index: " + indexLow);
System.out.println("The highest maximum for the December is: " + max + " at index: " + indexHigh);
}
}
支持类(指令说它需要在另一个类中。只需要方法):
import java.security.SecureRandom;
import java.util.*;
public class RandomMethod {
//implement random class
static Random randomNumbers = new Random();
public static void main(String[] args)
{
//#7 -- Generates a number between 10 & 20 ( 100x )
/*
int counter = 0;
while(counter <= 100)
{
System.out.println(randomInt(10,20));
counter++;
}
*/
//# 8
//int[] randArray = new int[randomInt(1,1000)];
}
// Random Int method where value is greater than x & less than y
public static int randomInt(int x, int y)
{
int randomValue = randomNumbers.nextInt(y - x) + x;
return randomValue;
}
}
答案 0 :(得分:3)
对于最小的数字
,我一直得到0
那是因为您已初始化min = 0
。而您的randInt()
永远不会生成数字< 0
。因此,min
永远不会改变。
要修复,让初始min
高于randInt产生的最高值。
int min = 1001; // Or to be safer, use Integer.MAX_VALUE
我也收到了错误的索引编号。
这是因为您的if
声明并未包含indexHigh = i;
声明。
使用,
if (randArray[i] > max) {
max = randArray[i];
indexHigh = i;
}
if (randArray[i] < min) {
min = randArray[i];
indexLow = i;
}
答案 1 :(得分:2)
你的min已初始化为0
。所以它只寻找零以下的最小值。将min初始化为更高的数字,高于预期的输入,或使用int min = Integer.MAX_VALUE;
。
对于索引打印,if语句的大括号{}
是一个问题。现在发生的是每个循环,indexHigh
&amp; indexLow
的重置值为i
。
//Max & Min
if (randArray[i] > max){
max = randArray[i];
indexHigh = i;
}
if (randArray[i] < min){
min = randArray[i];
indexLow = i;
}
这样,这两个变量在实际遇到更高/更低值时仅取i
的值。
答案 2 :(得分:0)
要检查最小值的变量应该用大数字初始化。尝试
int min = Integer.MAX_VALUE;