Упростите, если заявления, Java - PullRequest
1 голос
/ 02 января 2011

Я хочу упростить следующий код:

public static void main(String[] args) {

        int c1 = Integer.parseInt(args[0]);
        int c2 = Integer.parseInt(args[1]);
        int c3 = Integer.parseInt(args[2]);

        /* 1 */if (c2 - c1 == 0) {
            /* 2 */if (c1 != c3) {
                c3 += c1;
                /* 4 */System.out.println(c3);
                /* 5 */c3 *= c2;
                /* 6 */}
        }

        /* 7 */if (c1 == c3)
            /* 8 */if (c1 - c2 == 0)
            /* 9 */{
                c3 += c1;
                /* 10 */System.out.println(c3);
                /* 11 */c3 *= c1;
                /* 12 */if (c1 < c2)
                    c2 += 7;
                /* 13 */else
                    c2 += 5;
                /* 14 */}

        /* 15 */System.out.println(c1 + c2 + c3);
    }

Первый c2 - c1 == 0 такой же, как c2 == c1, а c1 - c2 == 0 такой же, как c1 == c2.Кроме того, я могу удалить if (c1 < c2) и сохранить содержимое оператора else.

Результат:

public static void main(String[] args) {

        int c1 = Integer.parseInt(args[0]);
        int c2 = Integer.parseInt(args[1]);
        int c3 = Integer.parseInt(args[2]);

        /* 1 */if (c1 == c2) {
            /* 2 */if (c1 != c3) {
                c3 += c1;
                /* 4 */System.out.println(c3);
                /* 5 */c3 *= c2;
                /* 6 */}
        }

        /* 7 */if (c1 == c3)
            /* 8 */if (c1 == c2)
            /* 9 */{
                c3 += c1;
                /* 10 */System.out.println(c3);
                /* 11 */c3 *= c1;

                    c2 += 5;
                /* 14 */}

        System.out.println(c1 + c2 + c3);
    }

Мой вопрос: что можно упростить сейчас?Если бы внутреннее if было бы снаружи, я мог бы упростить if.Что ты думаешь?

Ответы [ 5 ]

4 голосов
/ 02 января 2011

Предупреждение. Я предположил, что ваша вторая версия кода верна, т. Е. Что ваше первоначальное упрощение правильное.

Беспорядок if операторов может быть упрощен до:

if (c1 == c2) {
  c3 += c1;
  System.out.println(c3);
  if (c1 != c3) {
    c3 *= c2;
  } else {
    c2 += 5;
    c3 *= c1;
  }
}

Используя ваш /* line numbers /* в качестве ориентира, я упростил это:

  • Выведите общее условие в 1 и 8
  • Вычеркните общий код около 4 и 10.
2 голосов
/ 02 января 2011

Попробуйте использовать некоторые условные операторы в своих ifs, нет смысла их вкладывать, если вы можете сделать &&.

if (c1 == c2 && c1 != c3) {
    ...
}

if (c1 == c2 && c2 == c3) {
    ...
}
0 голосов
/ 02 января 2011

Вы не можете исключить операторы if. они выполняются последовательно, и первый изменяет значения для второго. Результат меняется.

0 голосов
/ 02 января 2011
public static void main(String[] args) {

int c1 = Integer.parseInt(args[0]);
int c2 = Integer.parseInt(args[1]);
int c3 = Integer.parseInt(args[2]);

if (c2 == c1) 
    {  
        if(c1!= c3)
        {
            c3 += c1;
            System.out.println(c3);
            c3 *= c2;
        } 
        else {
            c3 += c1;
            System.out.println(c3);
            c3 *= c1;
            c2 += 5;
        }
    }
System.out.println(c1 + c2 + c3);

}

0 голосов
/ 02 января 2011
public static void main(String[] args)
{
    int c1 = Integer.parseInt(args[0]);
    int c2 = Integer.parseInt(args[1]);
    int c3 = Integer.parseInt(args[2]);

    if(c1 == c2)
    {
        c3 += c1;
        System.out.println(c3);

        if(c1 == c3)
        {
            c3 *= c1;
            c2 += 5;
        }
        else
        {
            c3 *= c2;
        }       
    }
    System.out.println(c1 + c2 + c3);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...