在Java 8中为已排序的数组添加值

时间:2015-11-19 07:00:19

标签: java arrays sorted

提供以下列表,其中包含现代历史中的(半随机)年份。将列表保存到名为“events.txt”的文本文件中编写一个程序:

  1. 读入“events.txt”文件
  2. 首先对最新活动进行排序
  3. 确定1892年CMU的成立是否被视为世界历史事件
  4. 如果还没有,请将事件添加到事件列表
  5. 将新的事件列表写入名为“sorted_events.txt
  6. 的文件中
    import java.io.*;
    import java.util.*;
    
    public class EventSorter {
    public static void main(String[] args) throws FileNotFoundException{
    
        File file =new File("events.txt");
        FileReader read = new FileReader(file);
           LineNumberReader lines = new LineNumberReader(read);
           Scanner readIn = new Scanner(file);
           PrintWriter output = new PrintWriter("sorted_events.txt");
    
        try{
    
            //call for the file
    
    //make sure it exists
            if(file.exists()){
                {
                //first write this to determine the number of lines
               int lineNumber = 0;
               //gets the number of lines
                   while (lines.readLine() != null){
                  lineNumber++;
                   }
                   int[] event = new int[lineNumber];
                   int j = 0;
                   while(readIn.hasNext()){
    
                      event[j]=readIn.nextInt();
                      j++;
    
                   }
                   //sort the array
                   Arrays.sort(event);
                   boolean found;
                   for(int i = 0; i < event.length; i++){
                      if (event[i] == 1892){
                          //see if 1892 is on the list
                          System.out.println("CMU is a historic event");
                          found = true;
                      }
                          else{
                              addElement(event, 1892);
                          }
                      }
    
                      int[] sortedEvent = new int[lineNumber];
                   for(int k = 0; k < event.length; k++){
                      sortedEvent[k] = event[(event.length-1) - k];
                   System.out.println(sortedEvent[k]);
                   }
                   for(int print = 0 ; print < event.length; print++){
                      output.println(sortedEvent[print]);
    
                   }
            }
                   readIn.close();
                   output.close();
                   lines.close();
    
    
    
    
            }else{
                System.out.println("File does not exist!");
            }
            }
            catch(IOException e){
            e.printStackTrace();
        }
    
    }
    
    static int[] addElement(int[] a, int e) {
       a  = Arrays.copyOf(a, a.length + 1);
       a[a.length - 1] = e;
       return a;
    
    }
    
    
    }
    

2 个答案:

答案 0 :(得分:0)

我将严格回答标题“在Java 8中为已排序的数组添加值”。两个选项可以是:

  1. 从阵列中创建TreeSet或任何SortedSet(或基于二进制搜索树的结构)。默认情况下,此集合已排序,您添加到其中的所有新项目将对其进行排序。

  2. 使用与二进制搜索类似的内容来查找数组中应放置新元素的位置。

答案 1 :(得分:0)

这个程序完全符合你的要求,完美地回答了老师的问题。

然而,它使用了几种先进的Java技术,我强烈怀疑你的老师会给你任何功劳。因此,使用它需要您自担风险。

使用此代码可以做的最好的事情就是阅读它,理解它的概念并将它们与你所知道的结合起来。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class EventSorter {

  public static void main(String[] args) {
    try {
      Path inPath = Paths.get("events.txt");
      Path outPath = Paths.get("sorted_events.txt");
      int event = 1892;
      Comparator<Integer> lastFirst = Comparator.<Integer>naturalOrder().reversed();

      List<Integer> events = Files.lines(inPath).map(Integer::valueOf).sorted(lastFirst).collect(Collectors.toCollection(ArrayList::new));
      int pos = Collections.binarySearch(events, event, lastFirst);
      if (pos < 0) {
        events.add(~pos, event);
      }
      Files.write(outPath, events.stream().map(Object::toString).collect(Collectors.toList()));
    } catch (IOException ex) {
      System.out.println(ex.getMessage());
    }
  }
}

events.txt (输入)

1982
1821
1934
1809

sorted_events.txt (输出)

1982
1934
1892
1821
1809