关于如何解决Java中这个棘手问题的建议

时间:2019-06-09 02:31:23

标签: java

在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(){


}

1 个答案:

答案 0 :(得分:0)

我可以看到很多问题。

  • 您的代码正在创建一个新列表(称为newArray!?!)并填充它,但随后不使用它。

  • 您的代码正在按:字符拆分SSN,但是输入数据没有:字符。

  • 如果您的SSN验证方法遇到无效的SSN,但您的代码期望在这种情况下会返回false,则您的SSN验证方法将引发未经检查的异常。 / p>

  • 这是错误的:currentSsn != ""。请勿使用==!=比较字符串。您可能会得到错误的结果。

以此类推。