完整的任务是创建许多方法,例如getMode和getAverage,用于计算具有随机生成的数字和用户输入的最大上限,最小值和样本大小的数组的统计信息。我的所有其他方法似乎都有效,但每次我尝试返回填充集的最小值时,我得到0 - 即使输入的分数更高。
这是我的代码:
import java.util.Random;
public class Stats extends Main
{
int sampleSize;
double count;
double ave;
double sum;
int mode;
int evenCount;
int oddCount;
int countMatching;
int counter;
int target;
int match;
//Method: return the sample set's max value
public int getMax(int sampleSize, int[] data)
{
int max = Integer.MAX_VALUE;
max = data[0];
for(int i = 0; i < sampleSize; i++)
{
if (data[i] > max)
max = data[i];
}
return max;
}
//Method: return the min value
public int getMin(int sampleSize, int[] data)
{
int min = Integer.MIN_VALUE;
min = data[0];
for(int i = 0; i < sampleSize; i++)
{
if (data[i] < min)
min = data[i];
}
return min;
...
主程序:
import java.util.Random;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
int stats;
Scanner keyboard = new Scanner(System.in);
System.out.println("Welcome to the Stats Program!");
System.out.println();
System.out.println("Enter sample size: ");
int sampleSize = keyboard.nextInt();
System.out.println();
System.out.println("What is the sample set's minimum? ");
int min = keyboard.nextInt();
System.out.println();
System.out.println("What is the sample set's maximum? ");
int max = keyboard.nextInt();
System.out.println();
Stats g = new Stats();
System.out.println("Main Menu");
System.out.println();
System.out.println("1) Get max value");
System.out.println("2) Get min value");
System.out.println("3) Get the mean");
System.out.println("4) Get the mode");
System.out.println("5) Get the count of even numbers");
System.out.println("6) Get the count of odd numbers");
System.out.println("7) Display the sample set");
System.out.println("8) Return the count of numbers in the sample set that match the input parameter");
System.out.println("9) Exit");
System.out.println();
stats = keyboard.nextInt();
//Constructor: use an RNG to generate sampleSize integers between minValue and maxValue. Store the numbers in an array named 'data'.
int[] data = new int[sampleSize];
for (int i = 0; i < sampleSize; i++)
{
Random rand = new Random();
data[i] = rand.nextInt((max - min + 1) + min);
}
while (stats != 9)
{
if (stats == 1)
{
g.getMax(sampleSize, data);
System.out.println("Max is: " + g.getMax(sampleSize, data));
System.out.println();
}
else if (stats == 2)
{
g.getMin(sampleSize, data);
System.out.println("Min is: " + g.getMin(sampleSize, data));
System.out.println();
}
...
知道为什么我的程序没有返回适当的最小值(等于或高于用户输入的值)?最大值似乎很好 - 有时它低于用户输入的最大值,并且通常它是相等的。我已经看过其他问题了。 min / max和具有随机数的数组,但无法将其解决方案应用于我自己的问题。
提前致谢!
答案 0 :(得分:0)
您的min
方法似乎运行良好,可能您的数组中没有小于0的数字。
这个答案并不完全是为了让你的实际方法有效,但只是建议一个更简单的方法来做到这一点。
您可以使用Collections
和Commons Lang
来查找数组的最小值/最大值,并将基本数组转换为List。
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
public class tst {
public static void main(String[] args) {
int[] arr = {1, 23, 43, 2, 4, 5, 5, 1, 2, 3};
List lst = Arrays.asList(ArrayUtils.toObject(arr));
System.out.println(Collections.min(lst));
System.out.println(Collections.max(lst));
}
}
这将输出min:1
和max:43
。
如果你不被迫使用原始数组并自己做所有事情,这是一个很好的解决方案。
希望有所帮助:)
答案 1 :(得分:0)
请随机更改nextInt函数,了解如何获得随机值。 它应该是
data[i] = rand.nextInt(max - min + 1) + min;
不是data[i] = rand.nextInt((max - min + 1) + min);
答案 2 :(得分:0)
查看代码的这一部分:
for (int i = 0; i < sampleSize; i++)
{
Random rand = new Random();
data[i] = rand.nextInt((max - min + 1) + min);
}
首先,错误的是你在每次迭代中创建一个新的随机数生成器 。你应该在循环之前创建它,然后在循环中使用它。
但那不是那么重要的问题。更重要的是你运行rand.nextInt()
的方式。假设您的min
为3而max
为7.然后(max - min + 1) + min
会给您8.这意味着您正在调用rand.nextInt(8)
,这将为您提供一个数字0 ≤数量&lt; 8。
方法Random.nextInt(int n)
返回一个数字,使得0≤number<0。 ñ。因此,如果你想要一个3≤x≤1的数字。 8,你需要它给你0到5之间的东西,然后把它加到3.这意味着:
rand.nextInt(max - min + 1) + min;
它看起来像你写的几乎,但额外的一对圆括号完全不同。你不能把括号括在任何地方。方法名称后面的第一个括号定义了方法的参数,在您的情况下,它导致+ min
成为nextInt
参数的一部分。
还有一件事:你的班级不延伸Main
。他们没有任何关联,您的Stats
不是Main
,对吧?