Break dentro de um if,return dentro de um if

Eu sei que break faz o fluxo sair do bloco do código onde ele foi inserido.
Sei também que return faz o fluxo sair de um metódo sem executar nenhum código que esteja após a instrução.Alguém sabe razão de se usar break dentro do if---------------------------------------------------------
public void actionPerformed(ActionEvent event)
{
for (int count=0;count<colorItems.length;count++)
if(colorItems[count].isSelected()) {
displayLabel.setForeground(colorValues[count]);
break;
}
for(int count=0;count<fonts.length;count++)
if(event.getSource()==fonts[count]) {
displayLabel.setFont(new Font(fonts[count].getText(),style,72));
break;}
repaint();
}
Em outro exemplo eu vi essa construção

public void actionPerformed(ActionEvent ev)
{
for(int i=0;i<items.length;i++)
if(ev.getSource()==items[i] } {
getContentPane().setBackground(colorValues[i]);
repaint();
return;
}
}
Eu tirei o break e return e o programa funciona perfeitamente sem eles.

Parece que o uso do break nesse caso é só pra sair do loop e não executar iterações desnecessárias…

Cara, eu não entendi lhufas do seu codigo. Da proxima, pelo amor ao saco dos pobres usuários do GUJ, use as tags code e /code. :smiley:

Tentei reformatar o codigo, mas ele tah com erros de sintaxe, então eu não consegui entender direito o que vc quer. É isso, o código que vc postou?

public void actionPerformed(ActionEvent event) { for (int count = 0; count < colorItems.length; count++) if (colorItems[count].isSelected()) { displayLabel.setForeground(colorValues[count]); break; } for (int count = 0; count < fonts.length; count++) if (event.getSource() == fonts[count]) { displayLabel.setFont( new Font(fonts[count].getText(), style, 72)); break; } repaint(); }

E, no outro exemplo:

public void actionPerformed(ActionEvent ev) { for (int i = 0; i < items.length; i++) { if (ev.getSource() == items[i]) { getContentPane().setBackground(colorValues[i]); repaint(); return; } } }

1 curtida

Resposta para CV. Eu mostre apenas dois trechos de codigo e estão corretos.Como eu disse anteriormente causa-me dúvida o uso do break dentro do if e no outro exemplo o return dento de um if.Esses dois casos eu tirei do livro Java como programar do Deitel Exercício13.10 e13.11.

Sendo assim…

O break dentro desse if serve para sair do loop - neste caso, o for. Nao faz sentido nenhum ter um break dentro de um if que nao está em um loop, e talvez por isso vc tenha ficado confuso :slight_smile:

Entao, pra piorar, tente dizer o que esses dois métodos imprimem:

public void foo() { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { System.out.println(i + j); if(i == 5) { break; } } }

public void foo() { pegadinha: for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { System.out.println(i + j); if(i == 5) { break pegadinha; } } }

Em atenção ao CV. No primeiro exemplo quando i==5 ,o break quebra o loop no 5,mas continua o loop .No segundo exemplo voce fez um bloco rotulado .neste caso quando i==5 o break termina o bloco.Voce esta certo que no exemplo do Deitel o break esta ali para sair do loop do for ,mas esse break é desnecessário,como o return, também é.Obrigado pela atenção.RBarcia Rio de Janeiro.

Hummm … não é desnecessário, na verdade é uma optimização, se ele encontrar a condição logo nas primeiras iterações ele para o loop e não fica fazendo um monte de jumps, incrementos e verificações desnecessárias (lembra que já encontramos o que queriamos?)

Nem o break nem o return são desnecessários! :slight_smile:

No primeiro código, colorItems é um array. Imagine que você tem 20.000 elementos nesse array. E justamente o primeiro é o que está selecionado, satisfazendo o if. Sem o break ali, o laço vai continuar percorrendo os outros 19.999 elementos sem necessidade, pois ele já achou o que queria! A mesma coisa vale para o segundo laço. :wink:

Quanto ao return, vale o mesmo comentário acima! Ao invés dele, poderia ter colocado um break, que o resultado seria rigorosamente o mesmo! Apenas se quis que o código retornasse imediatamente. De repente se pode querer fazer algum tratamento caso não encontre o que se procura no laço… :wink:

1 curtida