【问题标题】:remove duplicates in java [closed]删除java中的重复项[关闭]
【发布时间】:2021-08-22 14:11:32
【问题描述】:

编写一个程序,读取一个 int 类型数字的文件,并将所有数字写入另一个文件,但没有任何重复的数字。 假设输入文件中的数字已经按照从小到大的顺序排列。程序运行后,新文件将包含原文件中的所有数字,但没有数字在文件中出现多次。输出文件中的数字也应该从小到大排序。您的程序应该从用户那里获取两个文件名

 Scanner data;       
    PrintWriter result; 

    ArrayList<Integer> numbers;  
    numbers = new ArrayList<>();

    try {  
        data = new Scanner(new File("C:\\Users\\hp\\Desktop\\data.txt"));
    }
    catch (FileNotFoundException e) {
        System.out.println("Can't find file data.txt!");
        return;  
    }

    try {  
        result = new PrintWriter("C:\\Users\\hp\\Desktop\\result.txt");
    }
    catch (FileNotFoundException e) {
        System.out.println("Can't open file result.txt!");
        System.out.println("Error: " + e);
        data.close(); 
        return;        
    }

    while ( data.hasNextInt()) {  
        int inputNumber = data.nextInt();
        numbers.add(inputNumber);
        
    }

  

    for (int i = numbers.size()-1; i >= 0; i--)
        result.println(numbers.get(i));
          

    System.out.println("Done!");

    data.close();
    result.close();

}  

【问题讨论】:

  • 你陈述了任务但没有问任何问题。
  • 你会用手做什么?重复:读一个数,如果和前一个数不一样,就写。

标签: java file arraylist duplicates


【解决方案1】:

您可以使用SortedSet 代替arraylist 来获取排序后的数字列表,没有任何重复。

或者,如果您仍想使用 ArrayList,您可以在一个循环中读取、忽略重复项并写入。

...
    while(data.hasNextInt()) {  
        int inputNumber = data.nextInt();
        if(!numbers.contains(inputNumber)) { 
             numbers.add(inputNumber);
             result.println(inputNumber);
        }
    }

    System.out.println("Done!");

    data.close();
    result.close();
 
}

或另一种更快的方法(仅在输入列表已排序时有效)

    // save the previous number
    int prev = -999999;
    while(data.hasNextInt()) {  
        int inputNumber = data.nextInt();
        if(inputNumber != prev) { 
             prev = inputNumber
             result.println(inputNumber);
        }
    }

    System.out.println("Done!");

    data.close();
    result.close();

}


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2014-06-30
    • 2019-08-25
    • 1970-01-01
    • 2014-06-08
    相关资源
    最近更新 更多