【问题标题】:Should I use for loop or If condition我应该使用 for 循环还是 If 条件
【发布时间】:2015-09-04 04:15:19
【问题描述】:

这是我的代码,我必须在其中附加一个字符串,以便我可以像这样输出 name,email,phoneNumber,这是我想到的两种方式

String matchedFields = "";
        DuplicateApplicantPojo duplicateApplicantPojo = new DuplicateApplicantPojo();
        if (applicant.getApplicantName().equals(detectionPojo.getName())) {
        matchedFields = DuplicateSettingsConstants.LABEL_NAME;
        }
        if (applicant.getApplicantEmail1().equals(detectionPojo.getEmail1())) {
        matchedFields = ", " + DuplicateSettingsConstants.LABEL_EMAIL;
        }
        if (applicant.getApplicantCellPhone().equals(detectionPojo.getCellPhone())) {
        matchedFields = ", " + DuplicateSettingsConstants.LABEL_PHONE;
        }

另一种方法是

 String matchedFields[] = new String[3];
        int i=0;
        DuplicateApplicantPojo duplicateApplicantPojo = new DuplicateApplicantPojo();
        if (applicant.getApplicantName().equals(detectionPojo.getName())) {
        matchedFields[i] = DuplicateSettingsConstants.LABEL_NAME;
        i++;
        }
        if (applicant.getApplicantEmail1().equals(detectionPojo.getEmail1())) {
        matchedFields[i] = DuplicateSettingsConstants.LABEL_EMAIL;
        i++;
        }
        if (applicant.getApplicantCellPhone().equals(detectionPojo.getCellPhone())) {
        matchedFields[i] =   DuplicateSettingsConstants.LABEL_PHONE;
        }
        String matched=matchedFields[0];
        for(int j=1;j<matchedFields.length;j++)
        {
        matched=", "+matchedFields[i];
        }

我应该选择哪种方式?或者有没有其他方法可以继续

【问题讨论】:

  • 从技术上讲,最好将此发布到代码审查中,因为您还没有真正将其标记为错误。
  • 考虑让它更具可读性。也许将您的实例重命名为申请人,并且类似于预期的东西而不是 detectionPojo
  • 你可以利用这个stackoverflow.com/a/26195047/1326537的回答来实现这个功能
  • 什么会让你“更喜欢”任何一种解决方案而不是另一种?快点?使用更少的内存?更少的边缘案例?更简单的代码?更小的字节码?在 Java 1.1 环境中编译没有警告? ...?如果我们不知道您的目的地,我们无法告诉您乘坐哪辆巴士。

标签: java if-statement for-loop


【解决方案1】:

您的代码不需要做额外的事情。第一种方法就足够了。

第二种方法的时间复杂度和空间复杂度都会更大。 (虽然差别很小)

【讨论】:

  • 感谢您提供的信息,但实际上我想要一个更好的解决方案,因为我不想使用很多其他方法
  • 在您的情况下,您所做的是最好的方法。没有什么可以变得更好了。如果您遇到必须编写这么多 if-else 语句的情况并且您想避免这种情况,您应该有适当的数据结构来线性检查所有内容。在您的 sec 方法中,您实际上做了两次相同的事情,一次使用 if-else,然后使用 for。
【解决方案2】:

它们都不起作用,因为您正在覆盖之前的值,而不是仅在末尾附加字符串。我会在 if 测试中这样做,因为那样你就不会为数组分配内存然后跟踪额外的 int。如果您确实使用 for 循环方式,使用字符串生成器会更好,请参阅:when to use StringBuilder in java

【讨论】:

  • 那么我应该使用 stringbuffer 并附加字段,然后在最终字符串上使用一些拆分方法吗??
  • 如果要的话,我觉得额外的费用不值得,这数据量的两组时间差很小。
  • @Vipul 不,就是这么简单的事情。总是试图让代码更易读、更简单。无需增加额外的复杂性。
  • @afzalex- 所以我的第一种方法会很好,对吧?
  • @Vipul 是的,这是一个很好的方法
【解决方案3】:

第一个应该做,除了您可以使用 StringBuilder 附加“matchedFields”

StringBuilder matchedFields = new StringBuilder();
DuplicateApplicantPojo duplicateApplicantPojo = new DuplicateApplicantPojo();
if (applicant.getApplicantName().equals(detectionPojo.getName())) {
   matchedFields.append(DuplicateSettingsConstants.LABEL_NAME);
}if (applicant.getApplicantEmail1().equals(detectionPojo.getEmail1())) {
   matchedFields.append(" , ").append (DuplicateSettingsConstants.LABEL_EMAIL);
}
  .
  .
  .

从 API 获取更多信息:http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

【讨论】:

    【解决方案4】:

    我建议添加辅助方法:

    private static String getMatched(String prefix, String s1, String s2, String label) {
        String matchedFields = "";
        if (s1.equals(s2)) {
             matchedFields = prefix + label;
        }
        return matchedFields;
    }
    

    然后你可以写(+static import for DuplicateSettingsConstants):

        String matchedFields = "";
        matchedFields += getMatched("", applicant.getApplicantName(), detectionPojo.getName(), LABEL_NAME);
        matchedFields += getMatched(", ", applicant.getApplicantEmail1(), detectionPojo.getEmail1(), LABEL_EMAIL);
        matchedFields += getMatched(", ", applicant.getApplicantCellPhone(), detectionPojo.getCellPhone(), LABEL_PHONE);
    

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2021-02-03
      • 2020-02-17
      • 2018-03-22
      • 2014-04-27
      • 2018-06-26
      • 1970-01-01
      • 2014-04-27
      • 2012-08-18
      相关资源
      最近更新 更多