以下代码将返回总和为 x 的整数对,例如:如果 arr {1, 2, 3, 4, 5] 且 x 为 7,则列表应包含 {3, 4} 和 {2, 5}。主要目标是了解如何在私有方法中执行参数验证。问题嵌套在评论中,请将建议限制为仅提出的问题。感谢您深入研究代码以检查我的问题。
public static List<Pair> getPairsFromPositiveArray(int[] arr, int x) {
// check for all positive integers
for (int i : arr) { // if arr is null, then this loop would throw NPE. So no need to make an exclicit check for null.
if (i < 0) throw new IllegalArgumentException("No integer should be negative.");
}
final List<Pair> list = new ArrayList<Pair>();
getPair(arr, x, list);
return list;
}
private static void getPair(int[] arr, int x, List<Pair> list) {
// QUESTION 1: Should check of "all positive integers" be done here too ?
/*
* QUESTION 2:
* list is data structure which we created internally ( user did not provide it )
* Does anyone suggest, it throw an NPE or do an explicit assert check for list != null ?
*/
assert list != null; // form my understanding of e effective java.
assert arr != null; // form my understanding of e effective java.
final Set<Integer> set = new HashSet<Integer>();
/*
* QUESTION 3:
* arr is a data structure which was input by the user.
* Should we check for assert arr != null or let loop throw a NPE ?
*/
for (int i : arr) {
if (set.contains(i)) {
System.out.println(i + " : ");
list.add(new Pair(i, x - i));
} else {
set.add(x - i);
}
}
}