如何对java文本文件进行排序,以便获得中间值?
到目前为止,我有下面的代码。我知道中位数是错误的,因为我在其中放置了数字,我真正想要的是程序自己从文件中提取这些数字,因为数字可能会改变。我不知道如何让程序得到2个数字,以便检索和计算中位数。请帮忙。我是个新手,我花了一整天才走到这一步如何对java文本文件进行排序,以便获得中间值?,java,file,median,Java,File,Median,到目前为止,我有下面的代码。我知道中位数是错误的,因为我在其中放置了数字,我真正想要的是程序自己从文件中提取这些数字,因为数字可能会改变。我不知道如何让程序得到2个数字,以便检索和计算中位数。请帮忙。我是个新手,我花了一整天才走到这一步 package trials; import java.util.Scanner; import java.io.IOException; import java.io.File; public class trials2 { public sta
package trials;
import java.util.Scanner;
import java.io.IOException;
import java.io.File;
public class trials2 {
public static void main(String[] args) throws IOException {
// This is a Scanner object that reads from the keyboard
Scanner in = new Scanner(System.in);
// The following is set to find the file
System.out.println("Please enter the name of your data file: ");
String fileName = in.next();
// The file is then to be scanned
Scanner fileToRead = new Scanner(new File(fileName));
// This loop finds the contents within the file
double sum = 0;
int numStudents = 0;
double maxVal = 0, minVal = 0;
boolean bFirstTime = true;
double currVal;
while (fileToRead.hasNext()) {
if (fileToRead.hasNextDouble()) {
numStudents++;
currVal = fileToRead.nextDouble();
// The following will find the maximum and minimum values within the file
if (bFirstTime) {
maxVal = currVal;
minVal = currVal;
bFirstTime = false;
} else {
maxVal = Math.max(maxVal,currVal);
minVal = Math.min(minVal, currVal);
}
sum += currVal;
} else {
fileToRead.next();
}
}
// Prints out comments and results
System.out.println("***Welcome to the Exam Statistics Program!!***");
System.out.println();
System.out.println("Minimum = " + minVal);
System.out.println("Maximum = " + maxVal);
System.out.println("Average score: " + sum/numStudents);
System.out.println();
System.out.println("Number of scores by letter grade: ");
System.out.println();
System.out.println("There are " + numStudents + " scores");
}
}
要做到这一点,有几个步骤
ArrayList
,用于在中存储值add
方法在读取时添加每个值Collections.sort
对列表进行排序- 如果列表的大小为零,则没有中间值
- 如果列表的大小为奇数,则中值是列表的位置
处的值size()/2
- 如果列表的大小为偶数,则中位数是列表的位置
和size()/2-1
处的值的平均值size()/2
我故意没有给你代码,因为我认为你很喜欢学习如何为自己做到这一点。但是,如果您需要任何特定步骤的更多详细信息,请随时发表评论。为什么不使用
合并或快速排序
对其进行排序,然后获取最小值、最大值、平均值、总值等将非常容易。工作:。最好将您的数字存储在数据结构中,如列表
,这样您可以更轻松地对其进行排序,并能够更轻松地找到中值。谢谢David!到目前为止,我只能将其粘贴到我的代码中。我无法理解其余部分:-/Scanner s=new Scanner(新文件(“文件路径”);ArrayList=新建ArrayList();while(s.hasNext()){list.add(s.next());}s.close();哦,不要做一个ArrayList
。改用ArrayList
。在执行以下操作的行之后currVal=fileToRead.nextDouble()
,将currVal
添加到您的列表中。感谢David的持续帮助。我在电脑上睡着了:/我现在正在上班,但回来后会继续。我的教授会减掉10%的分数,因为我会在晚些时候交,但至少我会更加熟悉这门语言。知道有这么多人愿意指导我,我感到很欣慰:)不客气。您会发现Stack Overflow社区中充满了非常有能力的人,他们非常乐意提供帮助。