The following code, would return pairs of integers which sum to x, eg: if arr {1, 2, 3, 4, 5] and x is 7 then list should contain {3, 4} and {2, 5}. Main goal is to understand how parameter validation should be performed in private method. Question is nested inside the comments and please restrict suggestions to questions asked only. Thanks for diving in code to check my questions.
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);
}
}
}
Question 1: I'd do it in the
for()
loop otherwise you have to loop through twice. But... what is your calling program expecting in such a case?Question 2: If list is
null
why not initialize it? Ifarr
isnull
, then yes there is a problem. Again what do you expect in this case o happen?Question 3: You check for
arr == null
per question.Normally good programming is defensive programming. Always assume bad or wrong inputs provided. On the other hand, for a reasonable simple method you don't necessary want to over complicate things.