Erro leitura de arquivo txt

7 respostas
N

O código abaixo é para a leitura de um arquivo .txt, e a armazenagem de seus valores em vetores de inteiros. O problema é que o código pára de executar depois do primeiro for. A saída exibida é: O numero de deposito eh:5.

Desculpem o algoritmo é grandinho mas prefero postar ele completo porque não identifiquei o erro;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Trabalho {

	public static void main(String[] args) {

		try{
			
		BufferedReader in = new BufferedReader(new FileReader("entrada.txt"));
		
		String str;
		int numDepositos = 0;
		int somaVetor1 = 0;
		int somaVetor2 = 0;
		
		str = in.readLine();
		
		numDepositos = Integer.parseInt( str );
		
		System.out.println("O numero de deposito eh:" + numDepositos);
		
		
		int vetor1[] = new int[numDepositos];
		int[] vetor2 = new int[numDepositos];
		
		String[] array_depositos;
		
		for(int i = 0; i < numDepositos; i++){
			str = in.readLine();
			
			
			array_depositos = str.split(" ");
			vetor1[i] = Integer.parseInt( array_depositos[0] );
			vetor2[i] = Integer.parseInt( array_depositos[1] );
			
			somaVetor1 = vetor1[i] + somaVetor1;
			somaVetor2 = vetor2[i] + somaVetor2;
			
			
			
			//System.out.println(str);
			
		
		}
		
		
		if( somaVetor1 < somaVetor2 ){
			int diferenca = somaVetor2 - somaVetor1;
			System.out.println("Zezinho recebeu " + diferenca + " a mais que Joaozinho!");
		}
		if( somaVetor1 == somaVetor2 ){
			System.out.println("Zezinho e Joaozinho receberam o mesmo valor");
		}
		if( somaVetor2 < somaVetor1 ){
			int diferenca = somaVetor1 - somaVetor2;
			System.out.println("Joaozinho recebeu " + diferenca + " a mais que Zezinho!");
		}
	
		//in.close();
		
		
		}catch(Exception e){
			e.printStackTrace();
		}
		

	}

}

7 Respostas

Rodrigo_Sasaki

E o que tem nesse arquivo ?

N

Os seguintes valores:

5 1 3 2 4 5 8 7 1 0

Só isso;

Rodrigo_Sasaki
No seu arquivo a última linha só tem 1 dígito, quando ele executar isso:
str = in.readLine();

array_depositos = str.split(" ");
vetor1[i] = Integer.parseInt(array_depositos[0]);
vetor2[i] = Integer.parseInt(array_depositos[1]); // Será lançada uma exceção aqui
Será lançada uma exceção na linha com o comentário, pois array_depositos só tem uma posição. A posição 0. Não foi lançada uma exceção aí ?
N
:D;

Verdade eu não tinha percebido isso!

Muito Obrigado de novo amigo;

Excelente fórum.
Rodrigo_Sasaki

Sem problemas :slight_smile:

Pra quem não tem preguiça de pesquisar e botar a mão na massa, realmente é um excelente fórum.

Agora aqueles que vem pedir coisa pronta, acabam levando só paulada :slight_smile:

R

Seguinte dei uma avaliada no seu código e dependendo do que está no arquivo entrada.txt pode se de erro retira o ultimo valor de 0 porque dentro do for vc está colocando:

for(int i = 0; i < numDepositos; i++){  
            str = in.readLine();  
              
              
            array_depositos = str.split(" ");  
            vetor1[i] = Integer.parseInt( array_depositos[0] );  
            vetor2[i] = Integer.parseInt( array_depositos[1] );  
              
            somaVetor1 = vetor1[i] + somaVetor1;  
            somaVetor2 = vetor2[i] + somaVetor2;  
              
              
              
            //System.out.println(str);  
              
          
        }
Nesse código quer dizer que tirando a primeira linha do arquivo entrada.txt pode ter um elemento, você está usando str.slipt(" "); então vai criar um array a partir dos espaços dos valores entre as linhas e você sempre adiciona dois valores a esse array array_depositos[0] array_depositos[1] então fica errado se você colocar o arquivo txt desse jeito
5  
1 3  
2 4  
5 8  
7 1  
0
tenta colocar assim sem o 0 no final como abaixo
5  
1 3  
2 4  
5 8  
7 1
Assim vai funcionar legal
N
Obrigado rcarauta, o digaoneves  também me deu essa dica;

Era realmente esse o problema;

Muito Obrigado.
Criado 3 de outubro de 2012
Ultima resposta 3 de out. de 2012
Respostas 7
Participantes 3