在Java的给定数组中,[766-09-9090, 766-09-9090, 877-90-9090, 877-90-9090, "S", "T", "U"]
我们如何获得具有这样的值的新数组: [766-09-9090、877-90-9090、877-90-9090、766-90-9090,“ S”,“ T”,“ U”] 注意:不能更改非SSN值,例如“ S”,“ T”,“ U”
这是我的第一个目标,但我没有得到想要的结果。任何建议将不胜感激
public static modifyArray(List<String> arrays) {
List<String> newArray = new ArrayList<String>();
boolean matchedFound = false;
for (int index = 0; index < arrays.size(); index++) {
if (arrays.get(index).length() == 9 && isValidSSN(arrays.get(index))) {
String nextMatchingSsn = getNextDistinctSsn(arrays);
System.out.println("Next Distinct SSN IS : " + nextMatchingSsn);
if (nextMatchingSsn != "") {
String[] pair = nextMatchingSsn.split(":");
if (pair.length == 2) {
Integer key = Integer.parseInt(pair[1]);
String ssn = pair[0];
swap(arrays.toArray(), index, key);
}
}
newArray.add(nextMatchingSsn);
} else {
System.out.println("Non Matching " + arrays.get(index));
newArray.add(arrays.get(index));
}
}
}
private static boolean isValidSSN(String s) {
if (s.length() != 9) {
throw new IllegalArgumentException("An SSN length must be 9");
}
for (int i = 0; i < 9; i++)
if (!Character.isDigit(s.charAt(i))) {
throw new IllegalArgumentException("SSN must have only digits.");
}
return (true);
}
private static String getNextDistinctSsn(List<String> ssns) {
String firstDiffSsn = "";
String currentSsn = "";
for (int index = 0; index < ssns.size(); index++) {
if (!currentSsn.equals(ssns.get(index)) && currentSsn != "") {
firstDiffSsn = ssns.get(index);
return firstDiffSsn + ":" + index;
} else {
currentSsn = ssns.get(index);
}
}
return firstDiffSsn;`enter code here`
}
public static final <T> void swap (T[] a, int i, int j) {
T t = a[i];
a[i] = a[j];
a[j] = t;
}
这是我的第一个目标,但我没有得到想要的结果。任何建议,将不胜感激。所以基本上,如果我必须编写一个单元测试,我的预期结果将如下所示:
public void validateResult(){
}
答案 0 :(得分:0)
我可以看到很多问题。
您的代码正在创建一个新列表(称为newArray
!?!)并填充它,但随后不使用它。
您的代码正在按:
字符拆分SSN,但是输入数据没有:
字符。
如果您的SSN验证方法遇到无效的SSN,但您的代码期望在这种情况下会返回false
,则您的SSN验证方法将引发未经检查的异常。 / p>
这是错误的:currentSsn != ""
。请勿使用==
或!=
比较字符串。您可能会得到错误的结果。
以此类推。