Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Entender o motivo de coluna precisar ser

Gostaria de entender o motivo do resultado sempre ser exibido assim:

0 0 02 02 024

Quando coloco o código assim:

public class ProgramaComBreak {

public static void main(String args[]) {
    for(int linha = 0; linha < 5; linha++) {
        for (int coluna = 0; coluna < 5; coluna++) {
            if ( coluna > linha ) {
                break;
            }
            System.out.print( coluna++ );
        }
        System.out.println();
    }
}

}

E o motivo de funcionar assim:

public class ProgramaComBreak {

public static void main(String args[]) {
    for(int linha = 0; linha < 5; linha++) {
        for (int coluna = 0; coluna < 5; coluna++) {
            if ( coluna > linha ) {
                break;
            }
            System.out.print( coluna+1);
        }
        System.out.println();
    }
}

}

2 respostas

Oi Camilla, tudo bem?

Escrever System.out.print( coluna++ ) é a mesma coisa que escrever:

System.out.print( coluna );
coluna += 1;

Estamos pedindo para imprimir o valor atual e logo em seguida incrementar, isso acaba fazendo com que o contador seja impresso com o valor 0 e ainda por cima seja incrementado duas vezes:

Uma vez logo depois de ser impresso, como eu mencionei

System.out.print( coluna++ );

E outra, em seguida, na própria linha do for

for (int coluna = 0; coluna < 5; coluna++) {

É por isso que está sendo impresso os valores de 2 em 2!

Já no segundo caso, quando escrevemos System.out.print( coluna+1 ), não estamos alterando a variável em si, estamos apenas pedindo que seja impresso o valor atual da coluna + 1. Ou seja, escrever coluna+1 não mexe no valor interno da variável, apenas na impressão, diferente do coluna ++ que como vimos antes, está alterando o valor interno da coluna onde não deveria.

Espero ter ajudado. Se ficou alguma dúvida, por favor, me avise!

Bons estudos!!

solução!

Olá Camila, tudo bem.

coloquei alguns print no código e acredito que se acompanhar o fluxo do código será mais fácil de entender

        for (int linha = 0; linha < 5; linha++) {
            System.out.println("Entrando no for interno...");
            for (int coluna = 0; coluna < 5; coluna++) {

                System.out.println("valor de linha: " + linha + ", valor de coluna: " + coluna);
                if (coluna > linha) {
                    System.out.println("Entrando no if (coluna > linha)...");
                    System.out.println("Saindo no for interno...");
                    break;
                }
                System.out.println("Imprimindo o valor de coluna: " + coluna++);
                System.out.println("Incrementando o valor de coluna");
            }
            System.out.println();
            System.out.println("Incrementando o valor de linha");

Executando o código acima, terá o seguinte resultado

Entrando no for interno...
valor de linha: 0, valor de coluna: 0
Imprimindo o valor de coluna: 0
Incrementando o valor de coluna
valor de linha: 0, valor de coluna: 2
Entrando no if (coluna > linha)...
Saindo no for interno...

Incrementando o valor de linha
Entrando no for interno...
valor de linha: 1, valor de coluna: 0
Imprimindo o valor de coluna: 0
Incrementando o valor de coluna
valor de linha: 1, valor de coluna: 2
Entrando no if (coluna > linha)...
Saindo no for interno...

Incrementando o valor de linha
Entrando no for interno...
valor de linha: 2, valor de coluna: 0
Imprimindo o valor de coluna: 0
Incrementando o valor de coluna
valor de linha: 2, valor de coluna: 2
Imprimindo o valor de coluna: 2
Incrementando o valor de coluna
valor de linha: 2, valor de coluna: 4
Entrando no if (coluna > linha)...
Saindo no for interno...

Incrementando o valor de linha
Entrando no for interno...
valor de linha: 3, valor de coluna: 0
Imprimindo o valor de coluna: 0
Incrementando o valor de coluna
valor de linha: 3, valor de coluna: 2
Imprimindo o valor de coluna: 2
Incrementando o valor de coluna
valor de linha: 3, valor de coluna: 4
Entrando no if (coluna > linha)...
Saindo no for interno...

Incrementando o valor de linha
Entrando no for interno...
valor de linha: 4, valor de coluna: 0
Imprimindo o valor de coluna: 0
Incrementando o valor de coluna
valor de linha: 4, valor de coluna: 2
Imprimindo o valor de coluna: 2
Incrementando o valor de coluna
valor de linha: 4, valor de coluna: 4
Imprimindo o valor de coluna: 4
Incrementando o valor de coluna

Incrementando o valor de linha

Veja que nos primeiros loops, somente o valor de coluna é incrementado, pois isso o break é sempre executado. O detalhe é que o incremento ocorre após a impressão, assim o valor impresso é sempre 0.

Quando vc utiliza o operador ++ o valor é incrementado após a impressão da variável.

Vc poderia ter utilizado o operador antes da variável, assim ++coluna. Desta forma a execução seria semelhante ao do segundo exemplo.