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 é:
[code] private Scanner inputMestre, inputTransacao;
private Formatter newmast;
//objetos que contem os arquivos antigos
AccountRecord record= new AccountRecord(), novoArquivo = new AccountRecord();
TransactionRecord transacao = new TransactionRecord();[/code]
[code]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[/code]