gpt4 book ai didi

java - 有人可以帮助解释为什么我无法显示正确的中位数吗? [Java]

转载 作者:行者123 更新时间:2023-11-30 02:43:22 26 4
gpt4 key购买 nike

所以我正在制作的程序应该能够确定平均值、中位数以及已将多少“成绩”放入程序中。尝试使用我猜想的一种流行的查找中位数的方法来显示中位数并且没有任何错误(谷歌认为它是如何查找中位数的好主意)。当我输入一个数字时,我总是得到 0.0,直到我最大化数组(设置为 25),然后它变成 1.0。仍然没有真正做任何它应该做的数学事情。

  DecimalFormat df = new DecimalFormat ("#0.0##");
String textBoxInputStr;
String gCountStr;
double boxInput = 0;
double[]gradeArray = new double[25];
int gradeCount = 0;
double mean = 0;
String meanStr;
double sum = 0;
double median = 0;
String medianStr;
do {
try {
if(gradeCount < 25) {
textBoxInputStr = JOptionPane.showInputDialog(this,"Enter Grade","Enter Grade", JOptionPane.PLAIN_MESSAGE); //makes texbox

boxInput = Double.parseDouble(textBoxInputStr); //parses what goes on in the textbox

gradeArray[gradeCount] = boxInput; //puts the parsed data into the array
gradeCount++; //is the tracker for how many grades are entered
gCountStr = Integer.toString(gradeCount); //converts the counter to string
txtGrades.setText(gCountStr); //places the newly converted counter into grades box for display
}
else //an error
{
JOptionPane.showInputDialog(this,"You can only input 25 values","Too Much Data", JOptionPane.PLAIN_MESSAGE);
}
//(Above) this is all to keep track of how many grades are entered and all the grades are stored in the array.
//start of median stuff
Arrays.sort(gradeArray, 0, gradeCount);
if (gradeCount % 2 == 0) {
median = ((double)gradeArray[gradeCount/2] + (double)gradeArray[gradeCount/2 - 1])/2;
medianStr = Double.toString(median);
txtMedian.setText(medianStr);
}
else {
median = (double) gradeArray[gradeCount/2];
medianStr = Double.toString(median);
txtMedian.setText(medianStr);
}
//start of the average
for (double i : gradeArray){
sum += i;
}
mean = sum / gradeCount;
meanStr = Double.toString(mean);
txtMean.setText(meanStr);

}
catch(NumberFormatException | HeadlessException e) //catches bad data
{
JOptionPane.showMessageDialog(this, "Your input must be numeric!", "Bad Data!", JOptionPane.ERROR_MESSAGE);
}
}
while(gradeCount <= 25);

}

最佳答案

两个问题。

首先,您的 do-while 循环缺少表示循环体的大括号。 (这是您的原始代码吗?还是仅您在此处发布的内容?)

其次,您声明 gradeArray作为原始数组,但使用其长度来计算每次迭代的更新中值。原始数组的长度从实例化之日起就永远不会改变——它不依赖于添加了多少元素。换句话说,gradeArray.length始终为 25(在您的示例中),无论您实际用成绩填充了多少个索引。

要解决第一个问题,只需在 do 之后的所有内容添加大括号即可和之前while .

要解决第二个问题,您应该使用 gradeCount 计算中位数作为数组的“长度”,而不是原始数组的完整(静态)长度。

<小时/>

编辑:

...另外,我刚刚注意到你的 sort覆盖整个数组(因此所有 25 个索引)。这也可能会导致问题,因为它会将“空”索引(实际上具有默认值 0.0)视为要排序的元素的一部分。以类似的方式解决这个问题。仅对数组中实际具有您输入的成绩的部分进行排序 - 即使用this method signature反而。例如

Array.sort(gradeArray, 0, gradeCount);
<小时/>

第二次编辑:

第三个问题(我认为不相关,但仍然需要解决)是 if (boxInput >= 0) 行应该是 if (gradeCount < 25) 。 ...假设此行的目的是执行注释中所说的操作:“检查输入的成绩数”。

关于java - 有人可以帮助解释为什么我无法显示正确的中位数吗? [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40987317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com