Java 从文本文件读取并递归合并排序

Java 从文本文件读取并递归合并排序,java,filereader,mergesort,Java,Filereader,Mergesort,我知道这个问题似乎是重复的,但我已经一遍又一遍地看了每个相关的问题,找不到我问题的答案。我应该从一个文本文件中读取,该文件的名称由用户输入确定。该文件包含一组未排序的类型双精度数字,例如: “0.1212312” "0.0013315" “0.0106026” 然后,系统会提示我通过递归方式对其进行合并排序。就编译而言,我的程序没有问题,也没有任何运行时错误,但是程序对某些输入没有正确响应,我似乎不知道为什么。所以我请求我的senpais的帮助。这是我的密码: import java.io.*;

我知道这个问题似乎是重复的,但我已经一遍又一遍地看了每个相关的问题,找不到我问题的答案。我应该从一个文本文件中读取,该文件的名称由用户输入确定。该文件包含一组未排序的类型双精度数字,例如:

“0.1212312” "0.0013315" “0.0106026”

然后,系统会提示我通过递归方式对其进行合并排序。就编译而言,我的程序没有问题,也没有任何运行时错误,但是程序对某些输入没有正确响应,我似乎不知道为什么。所以我请求我的senpais的帮助。这是我的密码:

import java.io.*;
import java.nio.file.Path;
import java.util.*;
import java.lang.*;
public class ProjectAssingment3 
{
    public static void main(String[] args) throws IOException {
        System.out.println("Enter file name please:");
        Scanner input;
        input = new Scanner(System.in);
        String in;
        in = input.nextLine();
        int count = 0;
        for(int i = 0; i < in.length(); i++)
        {
            if(Character.isWhitespace(in.charAt(i)))count++;
        }
        while(in.equals(null)||(count>1))
        {
            count=0;
            for(int i = 0; i < in.length(); i++) // Counts the white spaces to determine the number of arguments in input
            {
                if(Character.isWhitespace(in.charAt(i)))
            count++;
            }
            System.out.println("Invalid input! Please try again!");
            input = new Scanner(System.in);
            in = input.nextLine();
        }
        try {
            Scanner sc = new Scanner(new FileReader(new File(in)));
            List<Double> lines = new ArrayList<Double>();
            int i =0;
            while (sc.hasNextLine()) 
            {
            if(sc.nextLine().equals(null))//Checks if any empty lines
            {
                System.out.println("Empty Line Encountered!");
                System.exit(-1);
            }
            else if(!sc.hasNextDouble())//Checks if any non-double type lines
            {
                System.out.println("Invalid Line Encountered" + sc.nextLine());
                System.exit(-1);
            }
            lines.add(Double.parseDouble(sc.nextLine()));
            System.out.println(lines.get(i));i++; //Prints out original Unsorted array.
        }
        sc.close();

        //Unboxes the values from the ArrayList onto a array of type double
        double arr[] = new double[lines.size()];
        for(int j=0;j<arr.length;j++)
        {
            arr[j] = lines.get(j);
        }
        mergeSort(arr, 0, arr.length - 1);

        //Prints the sorted array
        for(int x=0;x<arr.length;x++)
        {
            System.out.println(arr[x]);
        }
    } catch (IOException e) {
        System.out.print("Failed to read input file:" + e.getMessage());
    }
}
public static void doMerge(double [] numbers, int left, int mid, int right)
{
  double [] temp = new double[25];
  int i, left_end, num_elements, tmp_pos;  
  left_end = (mid - 1);
  tmp_pos = left;
  num_elements = (right - left + 1);
  while ((left <= left_end) && (mid <= right))
  {
        if (numbers[left] <= numbers[mid])
          temp[tmp_pos] = numbers[left++];
        else
          temp[tmp_pos++] = numbers[mid++];
        }
        while (left <= left_end)
          temp[tmp_pos++] = numbers[left++];
        while (mid <= right)
          temp[tmp_pos++] = numbers[mid++];
        for (i = 0; i < num_elements; i++)
        {
          numbers[right] = temp[right];
          right--;
        }
    }
    public static void mergeSort(double [] numbers, int left, int right)
    {
    int mid;
    if (right > left)
    {
      mid = (right + left) / 2;
      mergeSort(numbers, left, mid);
      mergeSort(numbers, (mid + 1), right);
      doMerge(numbers, left, (mid+1), right);
    }
}
import java.io.*;
导入java.nio.file.Path;
导入java.util.*;
导入java.lang.*;
公共类项目助理3
{
公共静态void main(字符串[]args)引发IOException{
System.out.println(“请输入文件名:”);
扫描仪输入;
输入=新扫描仪(System.in);
串入;
in=input.nextLine();
整数计数=0;
对于(int i=0;i1))
{
计数=0;
for(int i=0;i对于(int j=0;j当我给出完整路径时,它接受该文件,但给出另一个异常

您也抛出异常,但谁正在捕获它


最后一件事,main的语法是
publicstaticvoidmain(String[]args)
,它必须获取
String[]args
作为参数(至少在eclipse中),否则它将无法识别主方法

您是否尝试打印以检查它在何处实际工作不正常?是的,我在发布之前将其删除,因为我认为这会使其变得混乱。它似乎可以识别无效的文件名,但每当我键入文件的实际名称时,它都没有响应,然后它就被删除了eems您在
/
`或
空格”方面有问题。您的文件名是否有空格?用户输入不能有多个参数,这就是我检查空格的原因。我的文件名是“input-10.txt”,但每当我键入文件名时,它不会给我一个目录未找到错误,它只是不执行代码的其余部分。如果使用相对路径,则可能程序的当前工作目录与您认为的不一样。请尝试打印该目录(谷歌表示如何),然后显式测试输入文件是否存在(谷歌表示如何)。谢谢你的回答。问题似乎不在路径目录上,因为程序可以毫无问题地找到文件。另外,请你再详细说明一下你的问题。我对try And catch不太熟悉,所以我真的需要一些澄清。当你抛出一些异常或其他方法时,谢谢你我很确定我的代码中有一个catch声明,但我会仔细检查。谢谢。当你键入正确的目录时,它没有出现任何错误吗?我只是检查了它,是的,它有。但是我发现它很奇怪,因为我一次又一次地确保我输入的文件名是正确的这是正确的,所以我不明白为什么它会给我一个确切的目录错误,而不是一个相对的