For dando resultado não esperado?

Estou com um problema com o for no Java.

Código:


 for (int i = 0; i < this.pegarTexto.length(); i++) {
            for (int j = 0; j <= i;) {
                j++;
                System.out.println("foraIF> I= "+i+" J= "+j);
            }
 }

Saída:


foraIF> I= 0 J= 1
foraIF> I= 1 J= 1 //X
foraIF> I= 1 J= 2
foraIF> I= 2 J= 1 //X
foraIF> I= 2 J= 2 //X
foraIF> I= 2 J= 3

  • a segunda linha da saida não era pra acontecer e a terceira e a quarta tambem não. ja fiz bastante teste aqui e não sei pq esta dando isso. alguém sabe o por que?

  • this.pegarTexto.length() esta valendo 3

Seu código parece errado colocou o incremento fora do for, correção:

for (int i = 0; i < this.pegarTexto.length(); i++) {
    for (int j = 0; j <= i; j++) { // <------ aqui
        System.out.println("foraIF> I= "+i+" J= "+j);
    }
}

Nn, a intenção era essa mesma. a saída tem que ficar assim:

foraIF> I= 0 J= 1
foraIF> I= 1 J= 2
foraIF> I= 2 J= 3

desse jeito (colocando o incremento dentro do for) fica assim:

foraIF> I= 0 J= 0
foraIF> I= 1 J= 0
foraIF> I= 1 J= 1
foraIF> I= 2 J= 0
foraIF> I= 2 J= 1
foraIF> I= 2 J= 2

Você não quer esse for então eu só corrigi o seu anterior exemplo que estava errado!

O que você quer na verdade?, explique!

Um for que me dê de saida isso:
foraIF> I= 0 J= 1
foraIF> I= 1 J= 2
foraIF> I= 2 J= 3

O for está sim funcionando corretamente (‘ele faz o que manda’). O problema e que as coisas não estão ocorrendo como tu imaginou. Logo, é um problema de lógica ou interpretação de como o for funciona, o que não é raro de ocorrer. Veja esse teste de mesa:

for(int i = 0; i < this.pegarTexto.length(); i++) {
	for (int j = 0; j <= i;){
		j++;
		System.out.println("foraIF> I= "+i+" J= "+j);
	}
}

Iteração 1:

i = 0;
j = 0 -> 0 <= 0 (true)
j++ -> j = 1

foraIF> I= 0 j= 1

Iteração 2:

i = 1;
j = 0 -> 0 <= 1 (true)
j++ -> j = 1

foraIF> I= 1 j= 1

i = 1;
j = 1 -> 1 <= 1 (true)
j++ -> j = 2

foraIF> I= 1 j= 2

Iteração 3:

i = 2
j = 0 -> 0 <= 1 (true)
j++ -> j = 1

foraIF> I= 2 j= 1

i = 2
j = 1 -> 1 <= 2 (true)
j++ -> j = 2

foraIF> I= 2 j= 2

i = 2
j = 2 -> 2 <= 2 (true)
j++ -> j = 3

foraIF> I= 2 j= 3

Eu não sei o que está de fato querendo com esse código, mas existem formas mais simples que conseguir o que queres, por exemplo:

public class Contagem {
	private static String texto = "str";
	public static void main(String[] args){
		int contador = 1;
		for(int i = 0; i < texto.length(); i++){
			if(contador <= texto.length()){
				System.out.println("ForaIf -> I = " + i + " J = " + contador++);
			}
		}
	}
}

Rodando…

image

1 curtida

eu sei que vai parecer meio nada haver, mas é fazer um conversor de código morse, eu tinha ate feito ja mas perdi o código e não lembro qual foi a lógica que usei. Mas valeu pela ajuda :slight_smile:

so não entendi essa parte, se puder explicar agradeço. aqui o j continua valendo 0, mas na interação um ele esta valendo 1. Por que ele voltou a ser 0?

Cada iteração do segundo for, j começa valendo 0 (reinicia o valor de j).