Método que faz calculo

Bom dia pessoal.
uma nova duvida, não consigo fazer funcionar esse método que calcula o preço final de compra com descontos etc…
tentei de algumas formar e não compilou, alem de ter ficado feio!
vou postar o enunciado completo para ficar fácil a compreensão e depois oque tenho ate o momento.
OBS: Não estou em busca de resposta, quero aprender com quem estiver disposto a explicar.
abç.

Classe Compra

Atributos privados

  • modalidade – atributo do tipo inteiro que indica uma das seguintes modalidades de compra:
    1 – à vista
    2 – parcelada, com 50% de entrada e o restante em duas parcelas iguais
    3 – parcelada em três parcelas iguais, sem nenhuma entrada.

  • cliente – objeto do tipo Cliente que indica quem faz a compra

  • data – objeto do tipo Data que indica a data em que a compra é realizada

  • precoOriginal – valor original do preço da compra, sem qualquer abatimento

  • precoFinal – é o preço final, já abatido algum desconto promocional

  • p1, p2, p3 – três atributos do tipo Parcela, que correspondem, respectivamente, à primeira, segunda e
    terceira parcela, se houver.

Construtor 1: com três parâmetros: cliente que faz a compra (tipo Cliente), data da
compra (tipo Data) e preço. Atualiza os atributos e chama o método escolherModalidade
para registrar a modalidade.

Construtor 2: faz o mesmo que o construtor 1, com a diferença com respeito à data da
compra. Em lugar de um parâmetro de tipo objeto, receberá três parâmetros inteiros, com
dia, mês e ano em que a compra está sendo feita. Com esses três dados, o construtor
deve instanciar um objeto Data para atribuir ao respectivo atributo.

Métodos:

  • escolherModalidade – Exibe na tela do usuário as três modalidades para que o cliente escolha uma delas,
    o que é feito por ele digitando um inteiro no teclado. Lembrando que, as modalidades podem ser 1, 2 ou 3.
    Se o usuário digitar um valor diferente, assumir o valor 1. Atualizar o atributo modalidade.
  • ultimasCrescente – método privado que recebe via parâmetro o valor da última compra e retorna true ou
    false indicando se as três últimas compras estão em ordem crescente ou não.

+finalizarCompra - Irá calcular o preço final da compra, conforme as regras da empresa para as várias modalidades, irá instanciar as devidas parcelas, no caso de compra parcelada, e atualizar vários atributos.
Regras para o cálculo de descontos:
Modalidade 1 – à vista - aplica uma das três situações abaixo (apenas uma delas):
-desconto de 20% sobre o preço, se o mês da compra coincide com o mês de aniversário do cliente;
-8% de desconto, se as três últimas compras, incluindo esta que está sendo feita, formam uma
sequência crescente; esta verificação deve ser feita chamando o método ultimasCrescente;
5% de desconto, se for apenas compra à vista.
Modalidade 2 – parcelada, com 50% de entrada e duas parcelas iguais. Recebe desconto de 3,5% sobre o
preço.
Modalidade 3 – parcelada em 3 vezes iguais. Não ganha desconto.
O método deve instanciar as parcelas, se houver, e atualizar os atributos preço final, p1, p2 e p3, desta classe.
Para calcular a data de vencimento de cada parcela, chamar o método calcularVencimentoParcela. Também
deve, conforme a situação, atualizar atributos da classe Cliente, chamando os métodos adequados. Ao final,
o método deve retornar um string contendo um dos seguintes textos, conforme o caso:
Compra à vista, ganhou 20% de desconto, pois cliente nasceu em xx/xx/xxxx.
Compra à vista, ganhou 8% de desconto.
Compra à vista, ganhou só 5% de desconto.
Compra com entrada + 2 parcelas, ganhou desconto de 3,5%.
Compra em 3 parcelas, não ganhou desconto.

  • calcularVencimentoParcela – a regra para determinar a data de vencimento de cada parcela é a seguinte:
    o vencimento da primeira parcela é sempre no dia 28 do mês imediatamente seguinte ao mês da compra;
    cada parcela subsequente vai vencer no dia 28 do mês seguinte ao da parcela anterior. Por exemplo, se uma
    compra parcelada em 3 vezes é feita no dia 12/11/2016, as três parcelas vão vencer, respectivamente, em
    28/12/2016, 28/1/2017 e 28/2/2017.
    Este método recebe uma data (objeto) e instancia e retorna um objeto Data que corresponde ao dia 28 do
    mês imediatamente seguinte.

  • exibirDados - imprime os valores dos atributos, com títulos e organização agradáveis à leitura. Chamar
    métodos de saída de outras classes, quando for o caso. Exibir detalhes das parcelas, apenas para as que
    realmente existem. Por exemplo, se a compra é à vista, não deve aparecer nada sobre parcelas.

oque tenho até agora.

public class Compra{
//Atributos
private int modalidade;
private Cliente cliente;
private Data data;
private double preco;
private double precoFinal;
private Parcela p1;
private Parcela p2;
private Parcela p3;

//Construtores
public Compra(Cliente cliente, Data data, double preco){
    this.cliente = cliente;
    this.data = data;
    this.preco = preco;
}

public int modalidade(){
    String msg;
    switch(this.modalidade){
        case '1':
        msg = "À vista";
        break;
        case '2':
        msg = "Parcelada, com 50% de entrada e o restante em duas parcelas iguais";
        break;
        case '3':
        msg = "Parcelada em três parcelas iguais, sem nenhuma entrada";
        break;
        default:
        msg = "A modalidade digitada não corresponde a nenhum dos casos";
        break;
    }
    System.out.println(msg);
}

public Compra(Cliente cliente,int umDia, int umMes, int umAno, double preco){
    this.cliente = cliente;
    this.data = new data(umDia, umMes, umAno);
}
//Mètodos

public void escolherModalidade(){
    System.out.println("Modalidade 1");
    System.out.println("Modalidade 2");
    System.out.println("Modalidade 3");
    this.modalidade = modalidade;
}

private void ultimasCrescente(float valorUltimaCompra){

}

public void finalizarCompra(){
    this.p1 = new parcela();
    this.p2 = new parcela();
    this.p3 = new parcela();
}

public Cliente getCliente(){
    return cliente;
}

public int getModalidade(){
    return modalidade;
}

public Data getData(){
    return data;
}

public double getPreco(){
    return preco;
}

public double getprecoFinal(){
    return precoFinal;
}

public void setModalidade(int modalidade){
    this.modalidade = modalidade;
}

public void setCliente(String nome){
    this.cliente = cliente;
}

public void setData(Data data){
    this.data = data;
}

public void exibirDados(){
    System.out.println("Modalidade");
    System.out.println("Data");
    System.out.println("Preço Original");
    System.out.println("Preço Final");
    System.out.println("Parcela 1");
    System.out.println("Parcela 2");
    System.out.println("Parcela 3");

} 

}