Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对java文本文件进行排序,以便获得中间值?_Java_File_Median - Fatal编程技术网

如何对java文本文件进行排序,以便获得中间值?

如何对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

到目前为止,我有下面的代码。我知道中位数是错误的,因为我在其中放置了数字,我真正想要的是程序自己从文件中提取这些数字,因为数字可能会改变。我不知道如何让程序得到2个数字,以便检索和计算中位数。请帮忙。我是个新手,我花了一整天才走到这一步

    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社区中充满了非常有能力的人,他们非常乐意提供帮助。