4
respostas

dúvidas básicas em java

boa noite pessoal, estou realizando exercícios da apostila de java da caelum fj-11 o seguinte exercicio:

Classe: Casa Atributos: cor, porta1, porta2, porta3 Método: void pinta(String s), int quantasPortasEstaoAbertas()
Crie uma casa e pinte-a. Crie três portas e coloque-as na casa; abra e feche as mesmas como desejar.
Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas.

vou postar meu código e me digam se eu consegui atingir o objetivo de maneira coerente a orientação a objetos! vlw abraço.

class Casa {

    String cor;
    boolean porta1;
    boolean porta2;
    boolean porta3;
    int abertas;
    Casa casa;

    void pinta(String cor) {

        System.out.println("pintamos a CASA de: " + cor);

    }

    void abre() {
        System.out.println("porta 1 aberta? " + this.porta1);
        System.out.println("porta 2 aberta? " + this.porta2);
        System.out.println("porta 3 aberta? " + this.porta3);

    }

    int quantasPortaEstaoAberta(boolean porta1, boolean porta2, boolean porta3) {

        if (porta1 == true) {
            abertas += 1;
        }
        if (porta2 == true) {
            abertas += 1;
        }
        if (porta3 == true) {
            abertas += 1;
        }

        return abertas;
    }

    void mostra() {
        System.out.println("numero de portas abertas sao: " + this.abertas);
    }
}
class TesteCasa {

    public static void main(String[] args) {

        Casa casa = new Casa();

        casa.abertas = 0;
        casa.pinta("Azul");
        casa.porta1 = true;
        casa.porta2 = false;
        casa.porta3 = false;
        casa.abre();

        casa.quantasPortaEstaoAberta(true, false, false);
        casa.mostra();

    }
}
4 respostas

Óla Andre tudo bem! seu código ficou muito bom sim hehe, só tem dois detalhes que eu percebi:

1º Você esta colocando um Atributo casa do Tipo Casa no seu código porém você não utiliza ele para nada

class Casa {

    String cor;
    boolean porta1;
    boolean porta2;
    boolean porta3;
    int abertas;
    Casa casa;  // Nesta Parte

Poderia remover esse atributo seu código continuará rodando normalmente

2° Eu reparei que o Exercício pede para você implementar um método

int quantasPortasEstaoAbertas()

este método não deve receber nada como parâmetro, porém ele retorna um int com número de portas abertas da casa pelo que entendi, você implementou ele assim

int quantasPortaEstaoAberta(boolean porta1, boolean porta2, boolean porta3) {

        if (porta1 == true) {
            abertas += 1;
        }
        if (porta2 == true) {
            abertas += 1;
        }
        if (porta3 == true) {
            abertas += 1;
        }

        return abertas;
    }

Seguindo o enunciado que você não precisa passar parâmetros para este método, pode deixar ele sem parâmetros. Pois assim quando você chamar ele deve te devolver o número de portas abertas na casa.

Eu faria as seguintes alterações nessa função

    int quantasPortaEstaoAberta() {

    int portasabertas = 0

        if (this.porta1 == true) {
            portasabertas += 1;
        }
        if (this.porta2 == true) {
            portasabertas += 1;
        }
        if (this.porta3 == true) {
            portasabertas += 1;
        }

        return portasabertas;
    }

Assim eu poderia tirar o atributo "abertas" da classe, pois a responsabilidade de saber quantas portas eu tenho abertas está na função "quantasPortaEstaoAberta()"

Ali no exercicio onde diz "Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas." você poderia fazer no TesteCasa

System.out.println("numero de portas abertas sao: "+ casa.quantasPortaEstaoAberta());

heheheh Abraço meu Amigo!

showww vlw D+ :D

tive uma outra dúvida: quando eu passo

return portasAbertas

estou dizendo que o método deve sempre retornar esse valor? ou seja quando eu faço a chamada como vc mostrou:

System.out.println("numero de portas abertas sao: "+ casa.quantasPortaEstaoAberta());

sempre ele irá imprimir o valor da variável de return?

Bom dia André tudo bem ! Perfeito isso mesmo, o método vai lhe retornar um inteiro com o valor da variável de retorno

por exemplo

public static void main(String[] args) {

        Casa casa = new Casa();

        casa.porta1 = true;
        casa.porta2 = false;
        casa.porta3 = false;

    //Irá retornar-  numero de portas abertas 1
    System.out.println("numero de portas abertas sao: "+ casa.quantasPortaEstaoAberta());

    //Alterando a quantidade de portas abertas
        casa.porta1 = true;
        casa.porta2 = true;
        casa.porta3 = true;

    //irá imprimir - número de portas abertas 3
    System.out.println("numero de portas abertas sao: "+ casa.quantasPortaEstaoAberta());

}

heheh Abraço Meu Amigo!

Oi! Vi que alguns colegas já te ajudaram, mas eu queria te ajudar com outra coisa! Bom, no Java temos algumas facilidades na hora de programar e vou te passar algumas delas!

Nessa parte:

if (porta1 == true) {
            abertas += 1;
 }

Há duas coisas que se podem ser feitas:

Primeiro: Quando vamos somar em 1 qualquer variável, nós podemos simplesmente usar o operador lógico "++". Esse operador é usado da seguinte maneira:

if (porta1 == true) {
    abertas++; //Modifiquei aqui
 }

Como você deve ter notado, é o nome da variável seguido de "++".

Segundo: Nessa mesma parte:

if (porta1 == true) {
    abertas += 1;
 }

Quando se tem uma varável do tipo boolean pode-se criar o if apenas usando o nome dessa variável, por exemplo:

if (porta1 == true) {
    abertas += 1;
 }

é o mesmo que:

if (porta1) { //Modifiquei essa parte
    abertas += 1;
 }

Viu que eu tirei o "== true"? Então, esse é o ponto! Você deve estar se perguntando como que faz caso você quisesse por a condição como falsa ("== false"), pois bem, é bem simples! No Java o sinal de exclamação (!) significa negação, então você precisaria apenas colocar o sinal de (!) antes da condição, por exemplo:

if (!porta1) { //Modifiquei essa parte
            abertas += 0;
 }

Se a porta não estiver aberta, adiciona 0 à variável abertas.

Então resumindo:

Exemplo 1:

int qntFrutasComidas = 0;
boolean podeComer = true;

if (podeComer == true) { 
    System.out.println("Estou comendo.");
    qntFrutasComidas += 1;
}

if(podeComer == false){
    System.out.println("Não estou comendo.");
}

Exemplo 2:

int qntFrutasComidas = 0;
boolean podeComer = true;

if (podeComer) { 
    System.out.println("Estou comendo.");
    qntFrutasComidas++;
}

if(!podeComer){
    System.out.println("Não estou comendo.");
}

A saída no console seria "Estou comendo" pois a variável booleana podeComer está com o valor true.

Tudo vai ser de como você nomeia suas variáveis. Viu como meu último exemplo ficou com uma cara mais limpa e com uma informação disposta de forma mais sutil e clara? Eu sei que esse não foi um dos melhores exemplos mas só quero que você entenda que em grandes projetos isso faz uma baita diferença! Coisas como omitir o "== true" ou usar o "++" em vez de "+= 1" são coisas pequenas que, a longo prazo, impactam gigantescamente no entendimento e profissionalismo do código final.

Um abraço e sucesso para você! Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software