[resolvido] Fora travar o sistema qual a utilidade de um laço infinito?

Pode parecer bem besta minha pergunta, mas estou lendo uma apostila para iniciantes da t2ti aqui com os seguintes dizeres:

//esse é um laço infinito. Pra que ele serve?
while ( true ) {
    if (obj.z == 0) {
        break;
    }
}

Achei melhor perguntar que ficar na dúvida, pois na apostila não tem resposta. O laço infinito tem alguma utilidade mesmo?? Se tiver, por favor, deem algum exemplo onde eu possa usar isso.
vlw

[quote=ksmarini]Pode parecer bem besta minha pergunta, mas estou lendo uma apostila da t2ti aqui com os seguintes dizeres:
Fora travar o sistema qual a utilidade de um laço infinito?

//esse é um laço infinito. Pra que ele serve?
while ( true ) {
    if (obj.z == 0) {
        break;
    }
}

Achei melhor perguntar que ficar na dúvida, pois não tem resposta.
vlw[/quote]

A repetição controlado por contador é chamada de repetição definida porque sabemos quantas vezes o loope sera executado, a repetição controlada por sentinela é chamada algumas vezes de repetição indefinida por não saber quantas vezes o loop sera executado, ou seja: permanece executando algo até esta condição não ser mais verdadeira, fonte( livro da Deitel 6 edição capitolo4.)

vai da lógica do programa que você está fazendo…

supondo que você queira que o programa execute agora e depois de 1 em 1 hora ele execute de novo, deixa o código com o loop infinito e no final do loop um sleep de 1 hora…
supondo que você esteja eseprando alguma determinada condição, deixa ele com o true, sendo assim infinito e de tempo em tempo verifica a condição e caso ela esteja válida você da um break.

Já usei laço infinito pra fazer um teste de estresse num sistema…

quanto a executar uma rotina de tempos em tempos, uso o Quartz que me permite agendar tarefas :wink:

Um exemplo do mundo real para você ver !


public void connect() throws IOException{
		this.clientList.clear();
		server = new ServerSocket(port);		
		new Thread(new Runnable() {

			@Override
			public void run() {
				Server.this.getPrintable().printStatus("Server Port: " + port);
				try {
					while (true) { //Inicicio do loop Infinito 
						Socket so = server.accept();			
						new ServerRunnable(so,Server.this);
					} // Fim do loop Infinito 
				} catch (SocketException e) {
					killAll();					
					Server.this.getPrintable().printError("SocketException: " + e.getMessage());
					Server.this.getPrintable().printError("Server offline");
//					disconect();
				} catch (IOException e) {
					killAll();
					Server.this.getPrintable().printError("IOException: " + e.getMessage());
					Server.this.getPrintable().printError("Server offline");
//					disconect();
				}

			}
		}).start();				
	}

Laço infinito é usado p/ casos específicos, vai depender do caso.

Se vc for desenvolver Game, provavelmente irá usa laços infinitos, como por exemplo > fique tocando a musica enquanto o game estiver rodando e etc…

Para realizar testes de software

Mas é incomum escrever laços infinitos dentro de um sistema, na verdade, a apostila cita p/ vc a possibilidade de existir o laço infinito, mas não necessariamente você usará no futuro em algum sistema, é muito dificil usarem esse tipo de coisa… faz assim… se um dia vc precisa usar um laço infinito, você sabe que existe e sabe como utiliza-lo na sua aplicação…então nem esquenta!

Abs
Rodrigo

Todas as explicações foram muito boas, gostei em especial da explicação do rodrigo. Muito obrigado pessoal. Aqui o povo é ninja em programação mesmo. :smiley: