Dúvida com While

6 respostas
silva.fernandes

Pessoal, estou rachando a cabeça em uma situação.
Tenho um arquivo txt.

01
02
02
02
01
02
02
02
01
02
02
02
01
02
02
02

Oque eu quero ?

Quero concatenar as informações que vem logo abaixo do 01, ou seja, quero gerar um arquivo assim :

01020202
01020202
01020202
01020202

Então estou usando a classe LineNumberReader para ler linha a linha e assim poder concatenar.
Mas no código abaixo no while fica em um loop infinito, ou seja, ele ignova as linhas que começam com 01

LineNumberReader in = new LineNumberReader( inputStreamReader); while(in.ready()){ String temp = in.readLine(); if(temp.startsWith("01")){ String temp2 = in.readLine(); while (temp2.startsWith("02")) {// aqui qdo a linha fosse 01 era // para sair do laço, mas não sai System.out.println("Entrou no while"); temp += temp2; System.out.println(temp); } System.out.println(temp); } }

Ao meu modo, qdo no while a operação fosse false ele sairia do laço, mas não sei … :shock:

Alguem pode me dizer pq não sai ?
Ou qual a melhor maneira para fazer isso.

Grato a todos

6 Respostas

kaabah

Seu arquivo sempre utiliza essa padrao?
01
02
02
02

Se for não precisa colocar aquele monte de if lá… Faz de uma vez a leitura de 4 em 4 linhas… até chegar o fim do seu arquivo…

outra dica: temp += temp2;

Não use “temp” como String… use StringBuffer… usando string, ele sempre vai criar um objeto novo no pool de strings. :wink:

:idea:

silva.fernandes

Bem,ele só usa esse padarão 01 e 02 porem, é imprevisivel quantidade de 02 que virá logo após 01 … :shock:

Por isso eu coloquei o if seguido de while…

Oq eu não entendo é o while … era para na hora que ele encontrasse a primeira linha 01 ele saisse do loop … mas ele não sai … ele fica infinito

Ninguem tem nenhum palpite ai não ?

T

Não faça um “while” dentro do outro. Isso é pedir para acontecer alguma coisa errada.

import java.math.*;

 public class Teste {
 	public static void main(String[] args) {
    
        ...
        // Você não precisa, e aliás não é recomendado, usar um LineNumberReader. 
        // Use um BufferedReader, que é mais rápido 
        BufferedReader in = new BufferedReader (inputStreamReader));
        // Não use "ready", pois ele não é confiável se o "reader" não for um arquivo.
        String linha;
        // Defina os "estados" da sua aplicação. 
        // Por exemplo, se você ler uma linha que começa por 1, você vai para o estado 1.
        // Se dentro do estado 1 você ler uma linha que começa por 2, você vai para o estado 2.
        
        // No código abaixo, suponho que a primeira linha começa por 1. 
        boolean parar = false;
        // Em vez disso, leia a linha dentro da comparação do while.
        while ( !parar && (linha = in.readLine()) != null) {
             if (linha.startsWith ("01")) {
                  blablabla...
             } else if (linha.startsWith ("02")) {
                  blablabla...
             } else...
        }
        
        in.close(); // só é preciso fechar o "stream" mais interno, não os outros encapsulados.
    }
}
silva.fernandes

Beleza Thingol … obrigado pelas recomendações.

Vou dar uma olhada em tudo que vc me falou depois eu posto o resultado

Valew

RenataFA

Amigo, está faltando uma linhazinha no seu código, olha:

while(in.ready()){
        String temp = in.readLine();
 	if(temp.startsWith("01")){
 	        String temp2 = in.readLine();
 		while (temp2.startsWith("02")) {// aqui qdo a linha fosse 01 era para sair do laço, mas não sai
 		        System.out.println("Entrou no while");
 			temp += temp2;
 			System.out.println(temp);
 			temp2 = in.readLine(); // AQUI!!! vc tem que ler a próxima linha, do jeito que está fazendo vc está o tempo todo parado na mesma linha
 		}
 		System.out.println(temp);
 	}
}

T+, []'s

T

É isso aí, Renata: na mosca.

De qualquer forma não indico o uso de um while dentro de outro.

Isso é o caso típico de uso de uma máquina de estados. É claro que é interessante desenhar a máquina primeiro, e pô-la na sua documentação.

Criado 26 de fevereiro de 2007
Ultima resposta 27 de fev. de 2007
Respostas 6
Participantes 4