
本文旨在介绍如何使用Java查找数组中的重复元素,并将其清晰地显示在消息对话框中。我们将通过示例代码,详细讲解查找重复项的逻辑,以及如何有效地组织和展示结果,最终实现对多个重复客户信息的友好展示。
查找重复元素
核心思路是将问题分解为几个独立的函数,每个函数负责一个特定的任务,使代码更易于理解和维护。
-
查找重复项函数:
该函数接收一个整数数组作为输入,并返回一个包含重复元素的列表。为了避免重复计算,可以使用 HashSet 来记录已经找到的重复元素。
立即学习“Java免费学习笔记(深入)”;
import javax.swing.JOptionPane; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class DuplicateFinder { public static ListfindDuplicates(int[] arr) { Set seen = new HashSet<>(); Set duplicates = new HashSet<>(); List result = new ArrayList<>(); for (int num : arr) { if (!seen.add(num)) { duplicates.add(num); } } result.addAll(duplicates); return result; } 此函数使用 HashSet 的 add() 方法的特性。add() 方法在添加新元素时返回 true,如果元素已经存在则返回 false。通过检查返回值,可以判断元素是否重复。
-
格式化输出函数:
该函数接收重复元素列表,并将其格式化为易于阅读的字符串。
public static String formatDuplicates(List
duplicates) { if (duplicates.isEmpty()) { return "HONEST CUSTOMERS"; } else { StringBuilder sb = new StringBuilder("Duplicates: "); for (int i = 0; i < duplicates.size(); i++) { sb.append("Customer #").append(duplicates.get(i)); if (i < duplicates.size() - 1) { sb.append(", "); } } return sb.toString(); } } 使用 StringBuilder 可以更有效地构建字符串,尤其是在循环中。
-
显示消息对话框函数:
该函数接收格式化后的字符串,并使用 JOptionPane 显示消息对话框。
public static void showMessage(String message) { JOptionPane.showMessageDialog(null, message); }
完整代码示例
将上述函数整合到 main 方法中,形成一个完整的示例程序。
import javax.swing.JOptionPane;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class DuplicateFinder {
public static List findDuplicates(int[] arr) {
Set seen = new HashSet<>();
Set duplicates = new HashSet<>();
List result = new ArrayList<>();
for (int num : arr) {
if (!seen.add(num)) {
duplicates.add(num);
}
}
result.addAll(duplicates);
return result;
}
public static String formatDuplicates(List duplicates) {
if (duplicates.isEmpty()) {
return "HONEST CUSTOMERS";
} else {
StringBuilder sb = new StringBuilder("Duplicates: ");
for (int i = 0; i < duplicates.size(); i++) {
sb.append("Customer #").append(duplicates.get(i));
if (i < duplicates.size() - 1) {
sb.append(", ");
}
}
return sb.toString();
}
}
public static void showMessage(String message) {
JOptionPane.showMessageDialog(null, message);
}
public static void main(String[] args) {
int number;
number = Integer.parseInt(JOptionPane.showInputDialog("Enter the number of customers: "));
int[] customers = new int[number];
for (int i = 0; i < number; i++) {
customers[i] = Integer.parseInt(JOptionPane.showInputDialog("Customer number: "));
}
List duplicates = findDuplicates(customers);
String message = formatDuplicates(duplicates);
showMessage(message);
}
} 运行步骤
- 编译Java代码:javac DuplicateFinder.java
- 运行Java程序:java DuplicateFinder
- 程序将弹出对话框,提示输入客户数量。
- 根据输入的数量,程序将依次弹出对话框,提示输入每个客户的编号。
- 程序最终将显示一个消息对话框,其中包含重复的客户编号,或者显示“HONEST CUSTOMERS”消息,如果没有重复项。
注意事项
- 输入验证:在实际应用中,应该添加输入验证,以确保用户输入的是有效的整数。
- 错误处理:应该添加错误处理,以处理可能出现的异常,例如 NumberFormatException。
- 性能优化:对于大型数组,可以考虑使用更高效的算法来查找重复项。例如,可以使用哈希表来统计每个元素的出现次数。
总结
通过将问题分解为更小的、更易于管理的部分,可以编写出更清晰、更易于维护的代码。使用 HashSet 可以有效地查找重复元素。StringBuilder 可以有效地构建字符串。JOptionPane 可以方便地显示消息对话框。










