Alguém pode me ajudar com essa? JAVA! Escrevi uns códigos, mas tem algum erro! Please! Agradeço!

package precodevenda;

import javax.swing.JOptionPane;

public class Precodevenda {
    
    
        private final double markup = 1.54;   
        private double compra;   
        private double preco = compra*markup;   
    


         public void calcularPreco (double compra, double markup){
             
             
      compra = Double.parseDouble(JOptionPane.showInputDialog(null ,"Digite a primeira nota:"));
      
      
        
    
     
            
            
            this.compra = compra;
            this.preco = compra*markup;
          
    
         JOptionPane.showMessageDialog(null,preco);
             
            
        
            
     
        
   
            
    }



}





package precodevenda;

public class Controle {

                public static void main(String [] args){
            
            
            Precodevenda preco = new Precodevenda();
            preco.calcularPreco(null, null);

}

}

Está sendo notificado o seguinte:

incompatible types: cannot be converted to doouble

e

Criar método “calcularPreco(java.lang.Object,java.lang.Object)” em precodevenda.Precodevenda

Aparece essa msg tb:

image

Olha como seu método está declarado:
parametros-01

Olha como você está chamando ele:
parametros-02

Sem contar nisso aqui:

Com todo respeito, a impressão que dá é que você está escrevendo códigos aleatórios na expectativa da galera do fórum resolver o exercício pra ti.
:frowning:

Se você traduzir a mensagem, vai perceber que o método espera receber parâmetros do tipo double mas você está passando null.

Pois vou lhe explicar o que está acontecendo, eu estou aprendendo essa matéria na faculdade, e no começo achei chato para caramba, entretanto agora estou até gostando mais, parece interessante, mas tem que estudar melhor as técnicas.

Eu tenho que entregar isso, estou estressado e atrasado, não to conseguindo focar e pesquisar igual nos semestres passados, por conta da pandemia, agora estou trabalhando (estou no trabalho nesse momento) e em casa está com muito barulho de obras, não tenho mais quarto, me mudei para casa da minha tia ontem, vou ficar lá por enquanto. Estou pegando uns tempos livres no trabalho para fazer esses exercícios.

Sou iniciante, esses erros bobos são porque ainda não conheço muito bem do assunto, e realmente, está muito difícil para mim estudar com mais detalhes, no entanto, sim, vim pedir uma ajuda para vocês aqui. não posso reprovar, sou bolssista e estagiário. Agradeço a ajuda de todos até agora!

Sim, eu entendi isso depois que li, estou pesquisando sobre como posso resolver isso. Mas compartilhei aqui tbm, agradeço a colaboração de todos nesse momento difícil!

O método calcularPreco recebe dois parâmetros do tipo double. Este é um tipo primitivo (em Java existe essa separação entre classes e primitivos, nem toda linguagem é assim), e tipos primitivos não podem ser null. Então quando você fez preco.calcularPreco(null, null), tentou passar um valor inválido para o tipo em questão.

Mas na verdade está sendo feita uma grande confusão (ou várias). Por exemplo, se a variável compra vai ser sobrescrita dentro do método, não precisa passá-la como parâmetro. Exemplo:

public void fazAlgo(double variavel) {
    variavel = algumOutroValor; // estou sobrescrevendo o valor da variável
}

...
fazAlgo(10); // o valor 10 é ignorado pelo método

É mais ou menos isso que você fez. Não importa o valor que é passado para o método, dentro dele esse valor será sobrescrito e perdido. Então na verdade este parâmetro, da forma que está, é inútil. Ou você lê o valor fora do método e passa, ou não passa e lê dentro do método.

Quanto ao markup, por que está passando null? Se a ideia é usar o markup que já foi definido antes (1.54), também não precisa passá-lo como parâmetro do método.

Vale pensar também na separação de responsabilidades - ou no princípio de Separation of Concerns: o método que faz o cálculo também deveria ser responsável por ler o valor da compra? Eu acho que ele só deveria receber os valores e calcular, deixe a leitura separada dele:

public class PrecoDeVenda {
    private double markup;

    // construtor recebe o valor do markup
    public PrecoDeVenda(double markup) {
        this.markup = markup;
    }

    public double calcularPreco(double compra) {
        return compra * this.markup;
    }
}

E no main:

public static void main(String[] args) {
    // cria uma instância com markup de 1.54
    PrecoDeVenda preco = new PrecoDeVenda(1.54);
    // lè os dados
    double compra = Double.parseDouble(JOptionPane.showInputDialog(null, "Digite a primeira nota:"));
    // calcula o preço final, baseado no preço de compra
    double precoFinal = preco.calcularPreco(compra);
    // exibe os dados
    JOptionPane.showMessageDialog(null, precoFinal);
}

Assim, não importa de onde veio o valor de compra (se foi digitado em um JOptionPane, se foi lido de um arquivo, etc), a classe PrecoDeVenda não se importa com isso: a ela só interessa calcular o valor final (e repare que mudei o nome para PrecoDeVenda, seguindo as convenções de nomenclatura do Java).

O mesmo vale para o valor calculado, o método só retorna o resultado, e quem o chamou que faça o que quiser com o resultado (se vai mostrar em um JOptionPane, gravar em um arquivo, salvar no banco de dados, etc, não importa, a classe PrecoDeVenda não precisa saber disso, ela só calcula e retorna o resultado).

Repare também que incluí um construtor que recebe o valor do markup, assim você pode criar instâncias diferentes com valores distintos:

// cria uma instância com markup de 1.54
PrecoDeVenda preco1 = new PrecoDeVenda(1.54);
// cria outra instância com markup diferente
PrecoDeVenda preco2 = new PrecoDeVenda(3.75);

// lè os dados
double compra = Double.parseDouble(JOptionPane.showInputDialog(null, "Digite a primeira nota:"));
// calcula o preço final, baseado no preço de compra

// cada instância de PrecoDeVenda usa o seu próprio markup
double precoFinal1 = preco1.calcularPreco(compra);
double precoFinal2 = preco2.calcularPreco(compra);

Claro que isso é só uma ideia, pois sem requisitos reais não dá para saber se era para fazer isso mesmo (o markup é fixo, varia conforme determinadas condições, etc?), mas enfim…

1 curtida

Valeu pela ajuda!