Sou iniciante em java e POO, e estou a fazer um projeto que consiste em uma calculadora de números complexos, e todas as operações feitas vão parar a um histórico que contem um array de operações. Esse histórico pode ser alterado e quando isso acontece tem de se recalcular as operações e esse é o meu problema, não sei como fazer isso. A classe complexo tem lá dois doubles (parte real, e imaginária) e os métodos que calculam(soma,subtração, etc).
Classe operações:
public class OpCalculadora {
    private char operador;
    private Complexo visor=new Complexo(0,0);
    public OpCalculadora(){
        this.operador = operador;
        this.visor = visor;
    }
    public OpCalculadora(char operador, Complexo visor) {
        this.operador = operador;
        this.visor = visor;
    }
    public char getOperador() {
        return operador;
    }   //Getters e Setters necessários para a realização de operações
    public void setOperador(char operador) {
        this.operador = operador;
    }
    public Complexo getVisor() {
        return visor;
    }
    public void setVisor(Complexo visor) {
        this.visor = visor;
    }
    public void contas(){   //início do método principal desta classe
        Scanner input = new Scanner(System.in);
        operador = input.next().charAt(0);
        switch (operador) {
                    case 's':  //Realização da operação escolhida pelo utilizador
                                  visor=visor.simetrico();break;
                    case '+':
                                Complexo csoma = new Complexo(0,0);
                                csoma.setA(input.nextDouble());
                                csoma.setB(input.nextDouble());
                                visor=visor.soma(csoma);break;
Classe Calculadora:
private int opcao;  //Variáveis necessárias ao funcionamento da calculadora
private Historico historico=new Historico();
private OpCalculadora[] array=new OpCalculadora[25];
private OpCalculadora aux=new OpCalculadora();
public Historico getHistorico() { return historico; }
public void setHistorico(Historico historico) { this.historico = historico; }
public OpCalculadora[] getArray() { return array; }
public void setArray(OpCalculadora[] array) { this.array = array; }
public OpCalculadora getAux() { return aux; }
public void setAux(OpCalculadora aux) { this.aux = aux; }
public void calculadora(){  //Início do método principal da calculadora
    Scanner input=new Scanner(System.in);
    int i=0;
    do {
        System.out.println("\t\t---Menu---");
        System.out.println("1. Efetuar cálculos com números complexos");
        System.out.println("2. Limpar histórico");
        System.out.println("3. Apagar operação do histórico");
        System.out.println("4. Mudar a ordem das operações");
        System.out.println("5. Ver histórico");
        System.out.println("6. Sair");
        opcao = input.nextInt();
        historico.setOperacoes(array);  //Encher o histórico com o array de operações realizadas
        switch (opcao) {
            case 1:
                System.out.println("Instruções:");
                System.out.println("s -> simetrico\t c -> conjugado\t i -> inverso\t p -> potenciação");
                System.out.println("+ -> soma\t - -> subtração\t * ->multiplicação\t / -> divisão");
                System.out.println("Digite sempre na seguinte ordem: operador, parte real, parte imaginária do complexo");
                System.out.println("Para terminar as operações clique na tecla z");
                do {
                    if(i==0){  //Criação das 25 operações a realizar
                        aux=new OpCalculadora();
                        for (int j=0;j<25;j++){
                            array[j]=new OpCalculadora();
                        }
                    }
                    aux.contas(); //Realização das contas
                    array[i].setOperador(aux.getOperador()); //Enviar para o array a operação e os argumentos
                    array[i].setVisor(aux.getVisor());
                    i++;
                } while (aux.getOperador() != 'z' || i > 25);break;
            case 2:
                historico.limpar();
                i=0;break;
            case 3:
                historico.mostrar();
                historico.apagar();
                historico.mostrar();break;
Classe Histórico:
public class Historico {
   private OpCalculadora[] operacoes = new OpCalculadora[25];
   public OpCalculadora[] getOperacoes() {
     return operacoes;
   }
   public void setOperacoes(OpCalculadora[] operacoes) {
     this.operacoes = operacoes;
   }