Problema na lógica (correspondencia de arquivos) java.io

0 respostas
T

Fiz o programa todo, a parte da linguagem eu consegui mas mesmo depois de várias horas não achei a solução para o problema abaixo:
Temos dois arquivos .txt, os quais são tranformados em objetos novamente em tempo de execução. Para isso utilizo as minhas classes AccountRecord e TransactionRecord. Estas classes funcionam bem e por isso não vou postar o código.

Quando houver um registro no objeto record que corresponda a um registro no objeto transacao, devo adicionar o valor da transacao no objeto novoArquivo, e o resto dos campos será igual ao objeto record.
Quando houver um registro no objeto record que NÃO possua um registro correspondente a um registro no objeto transacao, então simpesmente devo gravar o registro exatamente igual no objeto novoArquivo.
Caso haja um registro em transação que não tenha correspondente no objeto registro o sistema exibirá a menssagem "Registro de transação não-correspondido para o número da conta XXX". E não gravará este registro.

O código que eu fiz é:
private Scanner inputMestre, inputTransacao;
   private Formatter newmast;
   
//objetos que contem os arquivos antigos   
   AccountRecord record= new AccountRecord(), novoArquivo = new AccountRecord();
   TransactionRecord transacao = new TransactionRecord();
public void leArquivos()
   {

        while (inputMestre.hasNext())
         {
        	try{
        		
            record.setAccount( inputMestre.nextInt() ); // lê o número de conta
            record.setFirstName( inputMestre.next() ); // lê o primeiro nome
            record.setLastName( inputMestre.next() ); // lê o sobrenome
            record.setBalance( inputMestre.nextDouble() ); // lê o saldo
            
            	while (inputTransacao.hasNext()){
            		transacao.setNumeroDaConta(inputTransacao.nextInt());
            		transacao.setValorTransacao(inputTransacao.nextDouble());
            		  
            		if (record.getAccount() == transacao.getNumeroDaConta()){
            			novoArquivo.setAccount(record.getAccount());
            			novoArquivo.setFirstName(record.getFirstName());
            			novoArquivo.setLastName(record.getLastName());
            			novoArquivo.setBalance(record.combine(transacao));
            		}
            		else{
            			novoArquivo.setAccount(record.getAccount());
            			novoArquivo.setFirstName(record.getFirstName());
            			novoArquivo.setLastName(record.getLastName());
            			novoArquivo.setBalance(record.getBalance());
            			
            			System.out.printf("\nRegistro de transação não-correspondido " +
            					" para o número da conta: %d", transacao.getNumeroDaConta());
            		}
            
            		gravaArquivo();//grava um registro
            		
            	}//fim do while no objeto de transações
                                           	
            }
            catch (FormatterClosedException formatterClosedException){
            	System.err.println("Error writing to file.");
            	}
            catch ( NoSuchElementException elementException )
            {
               System.err.println( "Arquivo gravado errado" );
               inputMestre.close();
               System.exit( 1 );
            } // fim do catch
            catch ( IllegalStateException stateException )
            {
               System.err.println( "Arquivo corrompido" );
               System.exit( 1 );
            } // fim do catch
         } // fim do while objeto mestre
   } // fim do método
Criado 21 de agosto de 2007
Respostas 0
Participantes 1