Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

SÓ 1 DÚVIDA- DESF 1-Ñ OBRIGATÓRIO

Fiz um código maior para treinar bem mas precisei ver o ex do instrutor por uma dúvida. Não sei ainda resumir o código mas ele compilou, felizmente. Mas porque a impressão do menor e maior valor do carro não se consegue fazer pela classe Principal como o restante?Só consegui pela classe Carro.

package br.com.alura.Screenmatch2.um;
public class Carro{
    private String ModeloeAno1; private String ModeloeAno2; private String ModeloeAno3;
    private int PrecoMedio1;private int PrecoMedio2; private int PrecoMedio3;
    public int getPrecoMedio1() {return PrecoMedio1;}
    public int getPrecoMedio2() {return PrecoMedio2;}
    public int getPrecoMedio3() { return PrecoMedio3;}
    public void setPrecoMedio1(int precoMedio1) {PrecoMedio1 = precoMedio1;}
    public void setPrecoMedio2(int precoMedio2) {PrecoMedio2 = precoMedio2;}
    public void setPrecoMedio3(int precoMedio3) {PrecoMedio3 = precoMedio3;}
    public String getModeloeAno1() {return ModeloeAno1;}
    public void setModeloeAno1(String modeloeAno1) {ModeloeAno1 = modeloeAno1;}
    public String getModeloeAno2() {return ModeloeAno2;}
    public void setModeloEAno2(String modeloEAno2) {ModeloeAno2 = modeloEAno2;}
    public String getModeloeAno3() {return ModeloeAno3;}
    public void setModeloeAno3(String modeloeAno3) {ModeloeAno3 = modeloeAno3;}
    public void definirModelo(){}
    public void exibirInfo(){}
    public void exibirModeloeAno() {}
    public void exibirPreco(){}
    public void maiorOuMenorPreco(int PrecoMedio1, int PrecoMedio2, int PrecoMedio3){
    this.PrecoMedio1 = PrecoMedio1; this.PrecoMedio2 = PrecoMedio2; this.PrecoMedio3 = PrecoMedio3;
    System.out.println("O menor preço do HB20 é: " + vermenorPreco()); System.out.println("o maior preço do Hb20 é: " + vermaiorPreco());}
    private int vermenorPreco(){ int menorPreco = PrecoMedio1;
    if (PrecoMedio2 < menorPreco){menorPreco = PrecoMedio2;}
    if (PrecoMedio3 < menorPreco){menorPreco = PrecoMedio3;} 
     return menorPreco;}
    private int vermaiorPreco(){int maiorPreco = PrecoMedio1;
     if (PrecoMedio2 > maiorPreco){maiorPreco = PrecoMedio2;}
     if (PrecoMedio3 > maiorPreco){maiorPreco = PrecoMedio3;}
     return maiorPreco;}}
package br.com.alura.Screenmatch2.um; 
public class ModeloCarro extends Carro{
    private String sistema; private String modelo; private int Preco1; private int Preco2; private int Preco3
    public String getSistema() {return sistema;} public void setSistema(String sistema) this.sistema = sistema;}
    public String getModelo() {return modelo;} public void setModelo(String modelo) {this.modelo = modelo;}
    public int getPreco1(){return Preco1;} public void setPreco1(int preco1){Preco1 = preco1;}
    public int getPreco2() {return Preco2;} public void setPreco2(int preco2) {Preco2 = preco2;}
    public int getPreco3() {return Preco3;} public void setPreco3(int preco3){Preco3 = preco3;}}
import br.com.alura.Screenmatch2.um.Carro;
import br.com.alura.Screenmatch2.um.ModeloCarro;
public class RceCumPrincipal {public static void main(String[] args){
        ModeloCarro modelo = new ModeloCarro(); modelo.setModelo("Hatch");
        Carro ModeloAno1 = new Carro(); ModeloAno1.setModeloeAno1("Hyundai Hb20-2021");
        ModeloCarro OPreco1 = new ModeloCarro();OPreco1.setPreco1(75000);OPreco1.setPrecoMedio1(75000);
        Carro ModeloAno2 = new Carro(); ModeloAno2.setModeloEAno2("Hyundai Hb20S-2022");
        ModeloCarro OPreco2 = new ModeloCarro();OPreco2.setPreco2(83000);OPreco2.setPrecoMedio2(83000);
        Carro ModeloAno3 = new Carro();ModeloAno3.setModeloeAno3("Hyundai HB20 Comfort-2023");
        ModeloCarro OPreco3 = new ModeloCarro();OPreco3.setPreco3(90000); OPreco3.setPrecoMedio3(90000);
        modelo.definirModelo(); System.out.println("Modelo: " + modelo.getModelo());
        modelo.exibirInfo();
        System.out.println("Preço 1: " + OPreco1.getPreco1());
        System.out.println("Preço 2: " + OPreco2.getPreco2());
        System.out.println("Preço 3: " + OPreco3.getPreco3());
        Carro preco = new Carro(); preco.maiorOuMenorPreco(75000, 83000, 90000);
        ModeloAno1.exibirModeloeAno();System.out.println("Modelo 1: " + ModeloAno1.getModeloeAno1());
        ModeloAno2.exibirModeloeAno();System.out.println("Modelo 2: " + ModeloAno2.getModeloeAno2());
        ModeloAno3.exibirModeloeAno();System.out.println("Modelo 3: " + ModeloAno3.getModeloeAno3());
        OPreco1.exibirPreco();System.out.println("O preco médio do HB20 2021 é: "+ OPreco1.getPrecoMedio1());
        OPreco2.exibirPreco();System.out.println("O preço médio do HB20S 2022 é: " + OPreco2.getPrecoMedio2());
        OPreco3.exibirPreco();System.out.println("O preço médio do HB20 Comfort 2023 é : " + OPreco3.getPrecoMedio3())
        ModeloCarro Osistema = new ModeloCarro();
        Osistema.setSistema("Freios e Câmbio");System.out.println("Os sistemas principais de um carro são: " + Osistema.getSistema()}}
2 respostas
solução!

Oii Ana, tudo bem?

Pelo que entendi da sua dúvida, você está questionando por que a impressão dos valores mínimo e máximo do carro só foi possível realizar diretamente na classe Carro e não através da classe Principal. Isso ocorre devido à maneira como as classes e métodos foram organizados e à visibilidade dos métodos.

Na classe Carro, os métodos vermenorPreco() e vermaiorPreco() são privados (private). Isso significa que eles só podem ser acessados dentro da própria classe Carro. Não é possível chamá-los diretamente de outra classe, como a classe Principal. Essa é uma prática comum para encapsular a lógica interna da classe e expor apenas o que é necessário para outras partes do programa.

O método maiorOuMenorPreco(int PrecoMedio1, int PrecoMedio2, int PrecoMedio3) é público e foi utilizado para acessar essas funcionalidades privadas. Esse método configura os preços e, em seguida, imprime os resultados dos métodos privados. Portanto, para realizar a impressão dos valores mínimo e máximo na classe Principal, você precisou chamar esse método público que, internamente, lida com os métodos privados.

Se você deseja poder chamar essas funcionalidades diretamente da classe Principal, você poderia alterar a visibilidade dos métodos vermenorPreco() e vermaiorPreco() para public. No entanto, isso iria contra o princípio do encapsulamento, que é uma prática importante na programação orientada a objetos para manter o código seguro e bem organizado.

Um abraço e bons estudos.

Oi Lorena, bom dia!

Poxa, muito obrigada pela explicação detalhada. Então, estou correta na organização do código devido a proteção que é devida aos métodos para mantê-los seguros. De fato, é um dos pilares da OO como ensinado no curso, mas ainda não tinha 'capturado' a idéia, ou seja, ainda não tinha entendido claramente como ela funciona dentro do código quanto a impressão dos dados. E sua explicação fez isso ficar claro como água! Muito obrigada mesmo!

Um abraço!