我在这个程序中进展顺利,但随着我的进步,我似乎犯了一些很难发现的逻辑错误,需要一些帮助。我有将数组从最小到最大排序的方法。每当我将最小的数字打印到屏幕上时,即使我没有输入任何零,它也总是将该数字显示为 0。我可以获得正确的最高数字,除了当用户输入最大数量的数字时,它会打印第二大数字。有时我得到中位数的正确输出,但从未得到平均值的正确输出。任何帮助是极大的赞赏!我觉得我已经接近正确的代码了,但这些错误给我带来了困难。
public static Scanner kbd = new Scanner(System.in);
public static void main(String[] args) {
//change to 100 when done testing
final int MAXSIZE = 10;
int[] nums = new int [MAXSIZE];
int usedSize, indexOfNextSmallest = 0;
double median, average;
System.out.println("Please enter each number starting from least to greatest(a negative number will quit input): ");
usedSize = getNums(nums);
for (int index = 0; index < nums.length -1; index++) {
indexOfNextSmallest = getIndexOfSmallest(index, nums);
interchange(index, indexOfNextSmallest, nums);
}
median = medians(nums);
average = averages(nums);
System.out.println("The smallest number entered is " + nums[0] + ".");
System.out.println("The largest number entered is " + nums[nums.length-1] + ".");
System.out.println("The median is: " + median);
System.out.println("The average is: " + average);
}
public static int getIndexOfSmallest(int startIndex, int[] nums) {
int min = nums[startIndex];
int indexOfMin = startIndex;
for (int index = startIndex +1; index < nums.length; index++) {
if (nums[index] < min) {
min = nums[index];
indexOfMin = index;
}
}
return indexOfMin;
}
private static void interchange(int index, int indexOfNextSmallest, int[] nums) {
int temp = nums[index];
nums[index] = nums [indexOfNextSmallest];
nums[indexOfNextSmallest] = temp;
}
public static int getNums(int nums[]) {
int usedSize = 0, userValue = 0;
while(userValue >= 0 && usedSize < nums.length) {
nums[usedSize] = userValue;
userValue = kbd.nextInt();
usedSize++;
}
if(!(userValue >= 0)) {
--usedSize;
System.out.println(usedSize + " numbers entered.");
}
else if(!(usedSize < nums.length)) {
System.out.println("Maximum amount of inputs (" + nums.length + ") reached.");
}
return usedSize;
}
public static double medians(int nums[]) {
double median;
if (nums.length % 2 == 0)
median = ((double)nums[nums.length / 2] + (double)nums[nums.length / 2 - 1]) / 2;
else
median = (double)nums[nums.length / 2];
return median;
}
public static double averages(int nums[]) {
double average;
int sum = 0;
for (int index = 0; index < nums.length; index++){
sum = sum + nums[index];
}
average = ((double)sum / (double)nums.length);
return average;
}
} 这是我输入 1, 2, 3, 4, 5, -7 时得到的输出(负面影响是停止用户输入(这可能是一个问题吗?))
Please enter each number starting from least to greatest(a negative number will quit input):
1 2 3 4 5 -7
5 numbers entered.
The smallest number entered is 0.
The largest number entered is 5.
The median is: 0.5
The average is: 1.5
使用正确的代码我应该得到的答案是 1、5、3.0 和 3.0
再次感谢您的帮助。
最佳答案
您的 medians()
和 averages()
方法看起来不错。我建议您摆脱 getIndexOfSmallest()
和 interchange()
方法。您表面上只是需要这些方法,因为您正在尝试排序。但我相信排序正在改变数组。使用以下方法求最小值:
public int getMin(int[] nums) {
int min = nums[0];
for (int i=1; i < nums.length; ++i) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
我会将其作为家庭作业,让您编写一个方法来查找最大值。
关于java - 从用户那里收集一个数组,打印最小的数字,最大的数字,计算平均值和中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33793297/