Всякий раз, когда я вызываю метод «InsertionSort», выходной файл отображается пустым? Где я должен вызвать этот метод?

#java #sorting #arraylist #filereader #insertion-sort

#java #сортировка #список массивов #filereader #вставка-сортировка #arraylist

Вопрос:

* В этой программе я читаю два файла, а затем удаляю все знаки препинания и применяю «Алгоритм вставки» (я создал метод в этой программе).Каждый раз, когда я вызываю эту программу, включая «InsertionSort», генерируется пустой выходной файл, и, исключая этот метод, программа работает нормально.

     import java.util.*;
        import java.io.*;
        public class LexicanTester {
    // Sorting method
            public static void InsertionSort(ArrayList<String> List)
            {
                for(int i=1; i<List.size(); i   )
                {
                    String value = List.get(i);
                    int n = List.size();    
                    while(true )
                    {
                        if  (i==0)
                        {
                            List.set(0,value);
                        }
                        else if(List.get(i-1).compareTo(value)<=0)
                        {
                            List.set(i,value);
                            i--;
                        }
                        else
                        {
                            List.set(i, List.get(i-1));
                            i--;
                        }
                    }
                }
            }
            public static void main(String args[]) throws IOException
            {
                Scanner sc1 = new Scanner(new File("file name")); 
                Scanner sc2 = new Scanner(new File("file name"));
                ArrayList<String> list = new ArrayList<String>();
                FileWriter writer = new FileWriter ("C:\Users\amank\eclipse-workspace\DataStructures\src\output.txt");; 

            try {
// File read and adding to list
                    while (sc1.hasNext())
                    {
                        list.add(sc1.nextLine().trim().toLowerCase().replaceAll("\p{P}", "").replaceAll("[0-9] ",""));
                    }

                    while (sc2.hasNext())
                    {
                        list.add(sc2.nextLine().trim().toLowerCase().replaceAll("\p{P}", "").replaceAll("[0-9] ",""));
                    }
                    String newLine = System.getProperty("line.separator");
                    String newLine2 = System.getProperty("line.separator");


                    InsertionSort(list); // method to sort available text in the files
                    // writting in new file
                    for(String str: list)
                    {
                        writer.write(str   newLine);
                    }
                    for(String str1: list)
                    {
                        writer.write(str1   newLine2);
                    }
                    sc1.close();
                    sc2.close();
                    writer.close();

                }
                catch (Exception e) {
                    System.out.println("file not found");
                }
            }
        }*
  

Ответ №1:

Потому что InsertionSort имеет мертвый код в цикле while. Измените метод InsertionSort, как показано ниже.

   public static void InsertionSort(ArrayList<String> List) {
        for (int i = 1; i < List.size(); i  ) {
            String value = List.get(i);
            int j = i - 1;
            while (j >= 0 amp;amp; value.compareTo(List.get(j)) < 0) {
                List.set(j   1, List.get(j));
                j--;
            }
            List.set(j   1, value);
        }
    }
  

Комментарии:

1. после реализации этот текст появляется в файле, но не отсортирован.

2. Он не отсортирован или отсортирован в порядке возрастания?