2012-06-24 4 views
-6

У меня есть два оператора «if» в моем коде, что я могу сделать, чтобы, если одно утверждение «if» истинно, другое автоматически игнорируется/отключается?Оператор if в JAVA

+2

читать «else», часть инструкции «if», которая выполняется, если условие ложно. –

+1

Я знаю, что проблема в том, что существуют определенные условия, при которых оба утверждения «если» могут стать истинными. Поэтому у меня есть два условия, когда условия работы там одновременно ... Что вы думаете? – Matthew

+0

Пожалуйста, внесите свой код. – Lee

ответ

0

Таким образом, вы имеете следующее:

if(condition1){ 
    block1; 
} 
if(condition2){ 
    block2; 
}else{ 
    block3; 
} 

Чтобы отключить/игнорировать второй if вы можете либо использовать else if заявление:

if(condition1){ 
    block1; 
} else if(condition2){ 
    block2; 
}else{ 
    block3; 
} 

Или оператор возврата после block1

if(condition1){ 
    block1; 
    return; 
} 
if(condition2){ 
    block2; 
}else{ 
    block3; 
} 
+0

, какова цель «возврата»; в целом? Я не могу это понять: S – Matthew

+3

Возвращение в основном означает: ** Я СОВЕРШЕН, НЕ БУДЬТЕ НИКОГДА НИКОГДА НЕ ДАЕТ ** :) – GETah

+1

Это решение устраняет симптом. –

3
if(maxValY < 3) 
    { 
     p.setColor(Color.black); 
     //display the value of graph width and graph height 
     aw = String.valueOf(x1); 
     p.drawString("Graph Width = ", 740,490); 
     p.drawString(aw,840,490); 
     p.drawString("Graph Height = ", 740,510); 
     String ah = String.valueOf(y1); 
     p.drawString(ah,846,510); 
    } 
    else 
    { if (minValx == -1 || minValx == - 2 || minValx == - 3){ 
     p.setColor(Color.black); 
     //display the value of graph width and graph height 
     aw = String.valueOf(x1); 
     p.drawString("Graph Width = ", 740,90); 
     p.drawString(aw,840,90); 
     p.drawString("Graph Height = ", 740,110); 
     String ah = String.valueOf(y1); 
     p.drawString(ah,846,110); 
     } 
     else{ 
     p.setColor(Color.black); 
     //display the value of graph width and graph height 
     aw = String.valueOf(x1); 
     p.drawString("Graph Width = ", 50,90); 
     p.drawString(aw,150,90); 
     p.drawString("Graph Height = ", 50,110); 
     String ah = String.valueOf(y1); 
     p.drawString(ah,156,110); 
     } 
    } 
0

Есть, по крайней мере, два ответа. Один из них - поставить оператор возврата в нижней части 1-го if. Мне это не нравится, потому что это не может быть хорошим общим решением.

Другой ответ реструктуризировать ваш код немного ...

Во-первых, так как случай, где maxValX является> = 3, кажется, не быть там, где проблема заключается, я хотел бы получить, что из как путем изменения первого if условную:

if (maxValY >= 3) { 
     p.setColor(Color.black); 
     //display the value of graph width and graph height 
     aw = String.valueOf(x1); 
     p.drawString("Graph Width = ", 50, 90); 
     p.drawString(aw, 150, 90); 
     p.drawString("Graph Height = ", 50, 110); 
     String ah = String.valueOf(y1); 
     p.drawString(ah, 156, 110); 
    } else if (maxValY < 3) { 
     p.setColor(Color.black); 
     //display the value of graph width and graph height 
     aw = String.valueOf(x1); 
     p.drawString("Graph Width = ", 740, 490); 
     p.drawString(aw, 840, 490); 
     p.drawString("Graph Height = ", 740, 510); 
     String ah = String.valueOf(y1); 
     p.drawString(ah, 846, 510); 
    } 
    if (minValx == -1 || minValx == -2 || minValx == -3) { 
     p.setColor(Color.black); 
     //display the value of graph width and graph height 
     aw = String.valueOf(x1); 
     p.drawString("Graph Width = ", 740, 90); 
     p.drawString(aw, 840, 90); 
     p.drawString("Graph Height = ", 740, 110); 
     String ah = String.valueOf(y1); 
     p.drawString(ah, 846, 110); 
    } 

Так что все, что произошло то, что я поставил «не дубликат, если заявление вопрос» на самом верху.

Теперь у нас есть два условия: один, который касается minValX, и тот, который имеет дело с maxValY. Но теперь мы замечаем, что содержимое каждого из них почти идентично. Мы решить эту проблему путем рефакторинга кода немного (и пробирается в еще ...):

if (maxValY >= 3) { 
     p.setColor(Color.black); 
     //display the value of graph width and graph height 
     aw = String.valueOf(x1); 
     p.drawString("Graph Width = ", 50, 90); 
     p.drawString(aw, 150, 90); 
     p.drawString("Graph Height = ", 50, 110); 
     String ah = String.valueOf(y1); 
     p.drawString(ah, 156, 110); 
    } else if (maxValY < 3) { 
     q(491, 510); 
    } else if (minValx == -1 || minValx == -2 || minValx == -3) { 
     q(90, 110); 
    } else { 
     throw new RuntimeException("This cannot possibly happen ;-)"); 
    } 
} 

private void q(int loc1, int loc2) { 
    p.setColor(Color.black); 
    //display the value of graph width and graph height 
    aw = String.valueOf(x1); 
    p.drawString("Graph Width = ", 740, loc1); 
    p.drawString(aw, 840, loc1); 
    p.drawString("Graph Height = ", 740, loc2); 
    String ah = String.valueOf(y1); 
    p.drawString(ah, 846, loc2); 
} 

А потом мы замечаем, что кодовые блоки еще почти идентичны. Рефактор ...

private void someName() { 
    // ... 
    if (maxValY >= 3) { 
     q(50, 90, 510); 
    } else if (maxValY < 3) { 
     q(740, 490, 510); 
    } else if (minValx == -1 || minValx == -2 || minValx == -3) { 
     q(740, 90, 110); 
    } else { 
     throw new RuntimeException("This cannot possibly happen ;-)"); 
    } 
    // ... 
} 

private void q(int base, int graphWidth, int graphHeight) { 
    p.setColor(Color.black); 
    //display the value of graph width and graph height 
    aw = String.valueOf(x1); 
    p.drawString("Graph Width = ", base, graphWidth); 
    p.drawString(aw, base+100, graphWidth); 
    p.drawString("Graph Height = ", base, graphHeight); 
    String ah = String.valueOf(y1); 
    p.drawString(ah, base+100+6, graphHeight); 
} 

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

+0

Вопрос OP состоит в том, как игнорировать второй оператор if, а не о повторной факторизации его кода. – GETah

+0

@GETah Yep. И с этим решением OP получает то, что ему нужно, используя предпочтительную конструкцию, и, надеюсь, узнает немного больше, чем это. Начинающие часто задают неправильный вопрос, и это было здесь. –

Смежные вопросы