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

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]