2013-03-20 80 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;