Duvida metodo set e get com condicoes

Preciso fazer um programa que crie uma classe Retangulo. A classe tem atributos largura e altura, ambos sendo do tipo float. A classe deve ter métodos que calculam o perímetro (perimetro()) e a área (area()) do retângulo. A classe tem métodos set e get para a largura (largura) e a altura (altura). Os métodos set devem verificar se largura e altura são, cada um, números de ponto flutuante maiores que 0,0 e menores que 20,0. Escreva um programa em Java para testar a classe Retangulo.
Eu fiz o codigo abaixo mais na hora de executar quando eu digito numeros invalidos ele resolve normal nao considerando o if não sei onde estou errando ou se ta tudo errado alguem pode me ajudar???


package pacote;

import java.util.Scanner;

public class Retangulo {

	private static float largura;
	private static float altura;

	public float getLargura() {
		return largura;
	}

	public boolean setLargura(float largura) {

		if ((largura < 0.0) || (largura > 20.0)) {
			System.out.println("numero invalido");
			return false;
		} else {
			this.largura = largura;
			return true;
		}
	}

	public float getAltura() {
		return altura;
	}

	public boolean setAltura(float altura) {

		if ((altura < 0.0) || (altura > 20.0)) {
			System.out.println("numero invalido");
			return false;
			

		} else {
			this.altura = altura;
			return true;
		}
	}

	public float perimetro() {
		float p = 2 * (largura + altura);
		return p;
	}

	public float area() {
		float a = (largura * altura);
		return a;
	}

	public static void main(String args[]) {
		Retangulo oj = new Retangulo();
		Scanner entrada = new Scanner(System.in);
		System.out.print("altura:");
		altura = entrada.nextFloat();
		System.out.print("largura:");
		largura = entrada.nextFloat();
		System.out.print("perimetro : " + oj.perimetro() + " area :"
				+ oj.area());

	}

}

Por que você não chama os setters?

public static void main(String args[]) {  
        Retangulo oj = new Retangulo();  
        Scanner entrada = new Scanner(System.in);  
        System.out.print("altura:");  
        altura = entrada.nextFloat();  
        /*ao inves disso, coloque setaltura(entrada.nextFloat());*/
        System.out.print("largura:");  
        largura = entrada.nextFloat();  
        System.out.print("perimetro : " + oj.perimetro() + " area :"  
                + oj.area());  
  
    }  

vc nao esta chamando os metodos setters e sim chamando direto.

é verdade, agora deu certo muito obrigada.!!!

Olá! a primeira coisa que deve fazer, é tirar o modificador “static” da declaração dos atributos e acessá-los apenas usando getters e setters,

por exemplo:


private float largura=0.0;
private float altura=0.0;

E acessar assim:


Retangulo ret = new Retangulo();

ret.setAltura(5.5);

Você não tem os resultados esperados porque não está acessando os atributos usando uma referencia com um objeto

exemplo:

ClasseExemplar ex = new ClasseExemplar();

ex.setExemplo(valor);
System.out.println(ex.getExemplo(valor));

O correto seria:

Retangulo oj = new Retangulo();    
        Scanner entrada = new Scanner(System.in);    
        System.out.print("altura:");    
        oj.setAltura(entrada.nextFloat());    
        System.out.print("largura:");    
       oj.setLargura(entrada.nextFloat());    
        System.out.print("perimetro : " + oj.perimetro() + " area :"    
                + oj.area());   

Ele continua fazendo o cálculo porque está acessando os atributos largura e altura de maneira estática (porque está declarado dentro da mesma classe), isso faz com que os getters e setters não sejam executados.

Espero que ajude, qualquer dúvida, não hesite em perguntar