如何替换这个"如果"陈述与其他东西?

时间:2017-04-12 22:47:35

标签: java if-statement polymorphism

初学者编码器。所以我有这段代码:

public String doOperation(String s1, String s2) {
    if(s2.compareTo("") == 0) return s1;
    else return s2;
}

只是粗略的草稿,但基本上我说要返回s2,除非它是一个空字符串,然后返回s1。 如果没有if语句,我有什么方法可以做到这一点吗?对于赋值,我不应该使用if语句,switch语句,while循环,异常处理,或者几乎任何其他只是偷偷摸摸的方式来绕过" if"声明。

我试图通过多态来找到一种方法,但我也不想创造大量新事物来完成这项微小的任务。任何想法/帮助?谢谢!

6 个答案:

答案 0 :(得分:3)

您可以使用三元运算符:

return s2.isEmpty() ? s1 : s2;

答案 1 :(得分:2)

看起来像一个脑筋急转弯..这是可怕的代码,但应该做你想要的...

return s1.substring(Math.min(s1.length()-1, s1.length() * s2.length()) + s2

所以,如果s2的长度为0,你将从位置0开始打印s1,然后打印s2,这是空的

如果s2的长度不为0,你将从最后一个位置开始打印s1(即什么都没有),然后是s2

哦,小伙子,我现在觉得很脏:)。

答案 2 :(得分:1)

它被称为Ternary operation,超级有用

public String doOperation(String s1, String s2) {
    return s2.compareTo("") == 0 ? s1 : s2;
}

答案 3 :(得分:1)

由于其他人都已经覆盖了三元(或条件运算符? :),您也可以使用switch之类的

public String doOperation(String s1, String s2) {
    switch (s2.length()) {
    case 0: return s1;
    }
    return s2;
}

答案 4 :(得分:1)

您应始终确保首先处理空方案和异常处理。

public String doOperation(String s1, String s2) {
    if (s2 == null) {
        System.out.println("Error Msg: null value");
        throw new NullPointerException();
    }
    return s2.isEmpty() ? s1 : s2;
}

更新1:对于此特定情况,使用s2.isEmpty()s2.equals("")s2.length() == 0s2.compareTo("") == 0

答案 5 :(得分:1)

public String doOperation(String s1, String s2) {
    int mask = 1 / (1 + s2.length());
    return s1.substring(0, s1.length() * mask) + s2);
}

对于因0而导致的任何非空String的掩码,integer将为1String为空1 / 1 = 10

在第二行,s2掩码将“无效”'子字符串的长度,将其留空,并且附加的1是唯一返回的内容。

另一方面,s1.length()掩码不会更改s2的值,并且附加的1无论如何都是空的(因为我们得到了s1掩码),所以从头到尾唯一返回的是CREATE PROCEDURE myProc @EmpId NVARCHAR(50) = NULL AS BEGIN SET NOCOUNT ON; DECLARE @Sql NVARCHAR(MAX); SET @Sql = N' SELECT * FROM Table_Name WHERE 1 = 1' + CASE WHEN @EmpId IS NOT NULL THEN N' AND empId IN ( SELECT Split.a.value(''.'', ''VARCHAR(100)'') empId FROM ( SELECT Cast (''<X>'' + Replace(@EmpId, '','', ''</X><X>'') + ''</X>'' AS XML) AS Data ) AS t CROSS APPLY Data.nodes (''/X'') AS Split(a) ) ' ELSE N'' END Exec sp_executesql @Sql ,N'@EmpId NVARCHAR(50)' ,@EmpId END