none
While com titulo RRS feed

  • Pergunta

  • Bom dia Pessoal,

    Em Java existe a possibilidade de nomear um While para que você possa usar o break mesmo estando dentro de um FOR, por exemplo:

            boolean resultado = true;
            int calculo = 0;
            ResultadoConta: while(resultado)
            {
                for (int contador = 1; contador <= 30; contador++)
                {
                    calculo += contador;
                    if (calculo == 50)
                        break ResultadoConta;
                }
                if (calculo  > 100) resultado = true;
            }

    Neste caso (está em Java), quando o resultante do FOR estiver com um valor maior que 100 ele sai do while, senão ele executa o for novamente para continuar somando valores, mas se por algum motivo o valor resultar em 50 exato, ele sai do while direto.

    Existe alguma maneira de fazer isso em C#?


    Peterson Roberto Oliveira Seridonio
    Desenvolvedor C#
    MCTS Windows 7
    segunda-feira, 24 de outubro de 2011 13:44

Respostas

Todas as Respostas

  • Sim... usando GOTO.. fica feio igual ao Java :)

    Veja o codigo abaixo.. alterei um pouco o funcionamento do seu código, mas é quase a mesma coisa. Foi feito para evitar um loop infinito.

     

    class Program
        {
            static void Main(string[] args)
            {
    
                bool resultado = true;
                int calculo = 0;
                int incremento = 3;
                while (resultado)
                {
                    for (int contador = 1; contador <= 110; contador++)
                    {
                        calculo += incremento;
                        if (calculo == 50)
                            goto ResultadoConta;
                    }
                    if (calculo > 100) resultado = true;
                    Console.WriteLine("Hey!! Passei por aqui " + calculo.ToString());
                    incremento++;
                    calculo = 0;
                }
                
    ResultadoConta:  Console.Write(calculo);
                Console.ReadKey();
            }


     

    o resultado:

    Note que quando o resultado é 50 exato ele sai do laço for e do laço while tambem.

     

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

     




    segunda-feira, 24 de outubro de 2011 14:02
    Moderador
  • Usando o GoTo eu teria que usar rótulos, o que seria possível chamar de qualquer parte da minha rotina.

    Eu gostaria de usar apenas um nome para o meu for ou para o while, para que fosse possível sair apenas de um trecho da rotina, evitando assim que outro colaborador pule alguma rotina necessária usando o GoTo.

    Alguém conhece alguma outra maneira que não seja rótulo?

     

    Obrigado.


    Peterson Roberto Oliveira Seridonio
    Desenvolvedor C#
    MCTS Windows 7
    segunda-feira, 24 de outubro de 2011 16:06
  • Me desculpe, mas isso nao é um rotulo?

     ResultadoConta: while(resultado)

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    segunda-feira, 24 de outubro de 2011 16:12
    Moderador
  • Na verdade não funciona como um rótulo, só serve como um nome para aquele for ou while, não é permitido chamar de outro lugar, apenas de dentro da iteração que ele está nomeando.

     

    No caso do exemplo que eu passei só é possível usar ele dentro do while, não é possível chamar ele como um rótulo de um trecho antes do while, fazendo com que ele pule linhas de código.

    Ele está servindo apenas para que eu faça um break de uma iteração que não seja no nível que estou, seja um ou mais níveis acima.

    Pois se eu usasse somente o break, eu sairia do FOR e não do while.

     


    Peterson Roberto Oliveira Seridonio
    Desenvolvedor C#
    MCTS Windows 7
    segunda-feira, 24 de outubro de 2011 16:30
  • Entao a resposta é: Não existe nada similar em C#.

     

    A soluçao de contorno seria criar uma cascata de breaks

     

    algo como:

     

    bool keepLooping = true;
    while (keepLooping) {
        // ...
        while (shouldCont && keepLooping) {
            // ...
            while (shouldGo && keepLooping) {
                // ...
                if (timeToStop) { 
                    keepLooping  = false;
                    break; // break out of everything?
                }
            }  
        }
    }
    

     


    fonte:http://stackoverflow.com/questions/2339142/how-to-break-out-of-multiple-loops-at-once-in-c

     

     

    att

     


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

     


    segunda-feira, 24 de outubro de 2011 16:39
    Moderador