2013-03-20 3 views
2

У меня довольно большой код с четырьмя различными условиями, которые я пытался сократить с помощью условного тернарного оператора как 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

Вам просто нужно будет вложить несколько условных операций друг в друга. Но это уродливо и трудно читать. Так не надо. =) –

+2

Обычный совет: не надо! Попытка внедрить несколько условий с несколькими вложенными '?:' Просто приводит к тому, что код трудно читать. –

+1

Я бы поставил под вопрос, почему вы пытаетесь его укоротить. Короткий код не всегда лучше. Как бы то ни было, код, который вы опубликовали, довольно сложный, поэтому IMO рефакторинг его для использования тройных операторов сделает его невероятно нечитаемым. –

ответ

2

Как насчет этого, без каких-либо триад на всех:

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

Вам не нужно изобретать колесо со всеми этими условиями: здесь есть встроенный форматировщик строки Java для всех этих трудных вариантов и всего.)

+0

Позор на меня Я об этом не думал. Спасибо m8 – Droidman

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:

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

Удалены первая часть

Edit:

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; 
Смежные вопросы