2013-03-20 105 views
2

我用4个不同的条件得到了一个很大的代码,我试图用条件三元运算符descibed here来缩短。但是,由于我有两个以上的条件,因此我无法管理正确的语法。有人可以解释如何在这种情况下使用三元运算符?我的代码低于java - 使用三元运算符

不,我不要求为我写的代码,我在寻找三元操作者使用的多个条件

解释
 if (mp.getCurrentPosition()/1000/60 < 10 
      && mp.getCurrentPosition()/1000 % 60 < 10) { 
     tvTimeElapsed.setText("0" 
       + Integer.toString(mp.getCurrentPosition()/1000/60) 
       + ":" + "0" 
       + Integer.toString(mp.getCurrentPosition()/1000 % 60)); 

    } else if (mp.getCurrentPosition()/1000/60 < 10 
      && mp.getCurrentPosition()/1000 % 60 >= 10) { 

     tvTimeElapsed.setText("0" 
       + Integer.toString(mp.getCurrentPosition()/1000/60) 
       + ":" 
       + Integer.toString(mp.getCurrentPosition()/1000 % 60)); 

    } else if (mp.getCurrentPosition()/1000/60 >= 10 
      && mp.getCurrentPosition()/1000 % 60 < 10) { 

     tvTimeElapsed 
       .setText(Integer.toString(mp.getCurrentPosition()/1000/60) 
         + ":" 
         + "0" 
         + Integer.toString(mp.getCurrentPosition()/1000 % 60)); 

    } else { 

     tvTimeElapsed 
       .setText(Integer.toString(mp.getCurrentPosition()/1000/60) 
         + ":" 
         + Integer.toString(mp.getCurrentPosition()/1000 % 60)); 

    } 
+0

你只需要将几个条件操作相互嵌套。但这很丑陋,很难阅读。所以不要。 =) – 2013-03-20 11:42:55

+2

通常的建议是:不要!试图用多个嵌套'?:'嵌入多个条件只会导致难以阅读的代码。 – 2013-03-20 11:42:59

+1

我会质疑你为什么要缩短它。短代码并不总是更好。就目前而言,您发布的代码非常复杂,因此IMO将其重构为使用三元运算符会使其难以读取 – 2013-03-20 11:43:05

回答

2

如何只这一点,而不会在所有任何ternaries:

int seconds = mp.getCurrentPosition()/1000; 
tvTimeElapsed.setText(
    String.format("%02d:%02d", seconds/60, seconds % 60); 
); 

您不需要在这里重新发明所有这些条件:有一个内部的Java字符串格式化程序,用于所有这些艰难的选择和内容。 )

+0

对我的耻辱我没有想到这一点。感谢m8 – Droidman 2013-03-20 12:05:15

1

我必须与所有评论一致认为:它很丑。

String textToSet = (mp.getCurrentPosition()/1000/60 < 10 ? 
(mp.getCurrentPosition()/1000 % 60 < 10 ? "0" 
       + Integer.toString(mp.getCurrentPosition()/1000/60) 
       + ":" + "0" 
       + Integer.toString(mp.getCurrentPosition()/1000 % 60) : "0" 
       + Integer.toString(mp.getCurrentPosition()/1000/60) 
       + ":" 
       + Integer.toString(mp.getCurrentPosition()/1000 % 60)) : 
(mp.getCurrentPosition()/1000 % 60 < 10 ? "0" 
       + Integer.toString(mp.getCurrentPosition()/1000/60) 
       + ":" 
       + Integer.toString(mp.getCurrentPosition()/1000 % 60) : Integer.toString(mp.getCurrentPosition()/1000/60) 
         + ":" 
         + "0" 
         + Integer.toString(mp.getCurrentPosition()/1000 % 60))) 

随着更换新的整数的:

Integer int1 = mp.getCurrentPosition()/1000/60; 
Integer int2 = mp.getCurrentPosition()/1000 % 60; 

tvTimeElapsedText = (int1< 10 ? 
         (int2 < 10 ? 
          "0" + Integer.toString(int1) + ":" + "0" + Integer.toString(int2) : 
          "0" + Integer.toString(int1) + ":" + Integer.toString(int2) 
         ) : 
         (int2 < 10 ? 
          Integer.toString(int1) + ":" + "0" + Integer.toString(int2) : 
          Integer.toString(int1) + ":" + Integer.toString(int2) 
         ) 
        ) 
1

删除了第一部分

编辑:

int var1 = mp.getCurrentPosition()/1000/60; 
int var2 = mp.getCurrentPosition()/1000 % 60; 

String hour = var1 < 10 ? "0" + var1 : var1; 
String minute = var1 < 10 ? "0" + var2 : var2; 

String complete = hour + ":" + minute;