класс прямоугольник, проблема Deitel устанавливать и получать

Вы просите меня, чтобы создавать класс прямоугольник с длиной и шириной.

8.4 (Класс Прямоугольник) Вы Верите в класс, названный Прямоугольник с признаками длиной и шириной, каждым с предопределенным значением 1. У Вас должны быть методы, чтобы вычислять периметр и область прямоугольника. У Вас должны быть методы устанавливать и получать для длины и ширины. Методы устанавливать должны проверять, что длина и ширина были большими числами плавающего пункта 0,0, и несовершеннолетние 20,0. Напишите программу, чтобы пробовать класс Прямоугольник.

В чем я болен?

public class DeitelClaseRectangulo882Evaluacion {
    public static void main(String[] args) {
        // TODO code application logic here
        DeitelClasePrueba rectangulo = new  DeitelClasePrueba(2.0, 3.0 );
        System.out.printf("%d", rectangulo );
        //System.out.printf("%d", rectangulo );
        //rectangulo.obtenerLongitud();
        //rectangulo.obtenerAnchura();
    } // main
    class DeitelClasePrueba
    {
        private double longitud;
        private double anchura;
        public DeitelClasePrueba()
        {
            longitud = 1;
            anchura = 1;
        }
        // constructor con valor predeterminado de 1 
        public DeitelClasePrueba( double longitudPrueba, double anchuraPrueba ) 
        {
            longitud = longitudPrueba;
            anchura = anchuraPrueba;
        }
        public double calculaPerimetro() 
        {

            return 2 *( anchura + longitud );
        }
        public double calcularArea()
        {
            return anchura * longitud;
        }
        // metodo establecer debe verificar que longitud sea numero flotante
        // mayores de 0.0 y menores de 20.0
        public void establecerLongitud()
        {
            if ( longitud >= 0.0 && longitud < 20.0 )
                longitud = longitudPrueba;
            else
                throw new IllegalArgumentException(
                    "la longitud debe debe de ser > 0 < 20.0");
        } // establecerLongitud
        public void establecerAnchura()
        {
            if ( anchura >= 0.0 && anchura < 20.0 )
                anchura = anchuraPrueba;
            else 
                throw new IllegalArgumentException(
                    "el ancho debe de ser > 0 < 20 ");  
        }
        public double obtenerLongitud()
        {
            return longitud;
        }

        public double obtenerAnchura()
        {
            return anchura;
        }
    }
}

Ошибка:

Error

3
задан 18.10.2016, 06:59
5 ответов

Какие-то рассуждения, чтобы улучшать Ваш код и Ваши ошибки, которые он вероятно представляет variables indefinidas , acceso a la clase DeitelClasePrueba

  • Отделять классы Главного класса, хотя Java это не запрещает, не один хорошая практика
  • Когда он говорит о предопределенной стоимости, дело в том, что constructor пустой дебет инициализировать признаки в 1
  • Когда они просят у него методы obtener(get) и establecer(set) они относятся в getters и setters у которого должны быть все Ваши классы

Ваш класс Прямоугольник остался бы следующей формы

public class Rectangulo {
private double longitud;
private double anchura;

public Rectangulo(double longitud, double anchura) {
    this.longitud = longitud;
    this.anchura = anchura;
}

public Rectangulo() {
    this.longitud=1;
    this.anchura=1;
}

 /* Aquí van los Métodos calcular Area y Perimetro*/

public double getLongitud() {
    return longitud;
}
 public double getAnchura() {
    return anchura;
} 
/* Métodos Set incluida su Verificación */
public void setLongitud(double longitud) {
    if ( longitud > 0.0 && longitud < 20.0 )
        this.longitud = longitud;
    else
        throw new RuntimeException(
        "la longitud debe debe de ser > 0 < 20.0");
}

public void setAnchura(double anchura) {
    if (anchura > 0.0 && anchura < 20.0 )
        this.anchura = anchura;
    else
        throw new RuntimeException(
        "la Anchura debe debe de ser > 0 < 20.0");

}

@Override
public String toString() {
    return "Rectangulo{" + "longitud=" + longitud + ", anchura=" + anchura + '}';
 }
}

И в Вашем Главном Файле (Main) он имел бы

public static void main(String[] args)  {
  /* Constructor sin Parametros , atributos igual a 1 */
  Rectangulo rect = new Rectangulo();
  rect.setAnchura(-12.2);/*Exception menor a 0*/
  rect.setLongitud(12.2);/* Valor aceptado */
  System.out.println(rect.calcularArea()); /* Obtener Area*/
  System.out.println(rect.calculaPerimetro());/* Obtener Perimetro*/
}
1
ответ дан 24.11.2019, 13:04
  • 1
    Большое спасибо из-за информации я новый в этом, спасибо. вопрос во втором строителе ссылки " this" где ты распределяешь в 1 длине и ширине, они относятся к тем первого строителя? – Gerardo Bautista 18.10.2016, 19:58
  • 2
    this он ссылается на признаки класса. Для этого используют размещенное слово this схвати и # 237; что, когда в твоем главном классе ты напишешь Rectangulo rect = new Rectangulo () твои признаки tendr и # 225; n стоимость назначенный по умолчанию 1. Не перемещая пары его и # 225; метры. – Dev. Joel 18.10.2016, 20:03
  • 3
    уже я остаюсь готовым, но есть что-то, что у меня не остается ясным, – Gerardo Bautista 18.10.2016, 20:39
  • 4
    когда будет верить в новую инстанцию DeitelClasePrueba rect1 = new DeitelClasePrueba (); он говорит мне ошибку, которую он говорит " изменчивое нечетное число - static this cannot be referenced from в static context – Gerardo Bautista 18.10.2016, 20:41
  • 5
    Он из-за definici и # 243; n твоего класса в твоем собственном файле. Быть должным и # 237; an иметь отделенный этот класс Прямоугольник в другом файле. – Dev. Joel 18.10.2016, 22:38

Твоя проблема состоит в том, чтобы котором ты не поместил ему переменную параметра в методы, устанавливать.

public class DeitelClaseRectangulo882Evaluacion {

  public static void main(String[] args) {
    // TODO code application logic here
    DeitelClasePrueba rectangulo = new  DeitelClasePrueba();

    rectangulo.establecerLongitud(22);
    rectangulo.establecerAnchura(4);

    System.out.println(rectangulo.obtenerLongitud() );
    System.out.println( rectangulo.obtenerAnchura() );
    System.out.println("Perimetro "+rectangulo.calculaPerimetro() );
    System.out.println("Area: "+rectangulo.calcularArea() );
    //rectangulo.obtenerLongitud();
    //rectangulo.obtenerAnchura();



  } // main 

}

class DeitelClasePrueba
{

private float longitud;
private float anchura;


public DeitelClasePrueba()
{
    longitud = 1;
    anchura = 1;

}


public float calculaPerimetro() 
{

    return 2 *( anchura + longitud );
}

public float calcularArea()
{
    return anchura * longitud;
}

// metodo establecer debe verificar que longitud sea numero flotante
// mayores de 0.0 y menores de 20.0
public void establecerLongitud(float longitud)
{
    if ( longitud >= 0.0 && longitud < 20.0 )
        this.longitud = longitud;
    else
        throw new IllegalArgumentException(
            "la longitud debe debe de ser > 0 < 20.0");
} // establecerLongitud

public void establecerAnchura(float anchura)
{
    if ( anchura >= 0.0 && anchura < 20.0 )
        this.anchura = anchura;
    else 
        throw new IllegalArgumentException(
            "el ancho debe de ser > 0 < 20 ");

}

public float obtenerLongitud()
{
    return longitud;
}

 public float obtenerAnchura()
 {
    return anchura;
 }

}
1
ответ дан 24.11.2019, 13:04

Твои методы ты не перемещаешь их необходимые параметры, чтобы санкционировать

public void establecerLongitud(double longitudPrueba) {
if (longitud >= 0.0 && longitud < 20.0)
 longitud = longitudPrueba;
else
 throw new IllegalArgumentException(
  "la longitud debe debe de ser > 0 < 20.0");
  } // establecerLongitud

 public void establecerAnchura(double anchuraPrueba) {
   if (anchura >= 0.0 && anchura < 20.0)
     anchura = anchuraPrueba;
   else
      throw new IllegalArgumentException(
 "el ancho debe de ser > 0 < 20 ");
  }
1
ответ дан 24.11.2019, 13:04

Ошибка, которую он отпускает, состоит, из-за которого внутри метода main в том, что он статический, ты не можешь делать referncia во внутренний класс (я думаю, что это перевод inner class) DeitelClasePrueba, так как как он говорит тебе ошибку, со статического контекста ты не можешь снабжать ссылками не статический элемент.

Такой каков код ты будет функционировать, если ты просто пометишь класс DeitelClasePrueba как статика.

Adicionalmente, также - проблема, которую они передают @dev-joel и @alexis-rodrigez, нет параметра со стоимостью, которую нужно установить для длины и ширины.

Код

public class DeitelClaseRectangulo882Evaluacion {
    public static void main(String[] args) {

        DeitelClasePrueba rectangulo = new  DeitelClasePrueba(2.0, 3.0 );
        System.out.printf("%d", rectangulo );
    }

    // este static es el que habilita que puedas usar la clase desde el main
    static class DeitelClasePrueba
    {
        ...contenido...

        // metodo establecer debe verificar que longitud sea numero flotante
        // mayores de 0.0 y menores de 20.0
        public void establecerLongitud(float longitudPrueba)
        {
            if ( longitud >= 0.0 && longitud < 20.0 )
                longitud = longitudPrueba;
            else
                throw new IllegalArgumentException(
                "la longitud debe debe de ser > 0 < 20.0");
        } 

        // establecerLongitud
        public void establecerAnchura(float anchuraPrueba)
        {
            if ( anchura >= 0.0 && anchura < 20.0 )
                anchura = anchuraPrueba;
            else 
                throw new IllegalArgumentException(
                "el ancho debe de ser > 0 < 20 ");  
        }
    }
}

Замечание

  • Как он предлагает тебе @dev-joel, отделяешь ли ты DitelClasePrueba в файле, отделенном с тем же именем, у тебя не было бы этой проблемы.
1
ответ дан 24.11.2019, 13:04

Возможная другая soluciГіn приходит в голову мне может быть следующая:

В строителе, resolvГ - тема призывания к set (устанавливать), чтобы санкционировать неудар в лунку .

public class Rectangulo {
    private double longuitud, altura;

    public Rectangulo(double longuitud, double altura) {
        this.longuitud = setLonguitud(longuitud);
        this.altura = setAltura(altura);
    }
    public Rectangulo(){
        this.longuitud = 1;
        this.altura = 1;
    }
    public double getLonguitud() {
        return longuitud;
    }

    public double setLonguitud(double longuitud) {

        if (longuitud > 0.0 && longuitud <= 20.0) {
            return longuitud;
        } else {
            return longuitud = 1;
        }

    }

    public double getAltura() {
        return altura;
    }

    public double setAltura(double altura) {
        if (altura > 0.0 && altura <= 20.0){
            return this.altura = altura;
        }else{
            return this.altura = 1;
        }
    }

    public double calcularArea() {
        return getLonguitud() * getAltura();
    }

    public double calcularPerimetro() {

        return 2 * (getLonguitud() + getAltura());
    }

    public String toRectangulo() {
        DecimalFormat dosDigitos = new DecimalFormat("#.####");
        return "Longuitud: " + dosDigitos.format(getLonguitud()) + " Altura: "
            + dosDigitos.format(getAltura());
    }

    public String toArea() {
        DecimalFormat dosDigitos = new DecimalFormat("#.####");
        return "El area es: " + dosDigitos.format(calcularArea());
    }

    public String toPerimetro() {
        DecimalFormat dosDigitos = new DecimalFormat("#.####");
        return "El perimetro es: " + dosDigitos.format(calcularPerimetro());
    }
}

... и main , чтобы делать доказательство, serГ - в asГ-:

public class PruebaRectangulo {
    public static void main(String[] args) {
        Rectangulo r1 = new Rectangulo(-1, -22.06);
        Rectangulo r2 = new Rectangulo(3.15, 5.15);
        Rectangulo r4 = new Rectangulo(20.5, 0);

        System.out.println("R1");

        r1.calcularArea();
        r1.calcularPerimetro();
        System.out.println(r1.toRectangulo());
        System.out.println(r1.toArea());
        System.out.println(r1.toPerimetro());

        System.out.println("R2");
        r2.calcularArea();
        r2.calcularPerimetro();
        System.out.println(r2.toRectangulo());
        System.out.println(r2.toArea());
        System.out.println(r2.toPerimetro());

        System.out.println("R4");
        r4.calcularArea();
        r4.calcularPerimetro();
        System.out.println(r4.toRectangulo());
        System.out.println(r4.toArea());
        System.out.println(r4.toPerimetro());
    }

}
1
ответ дан 24.11.2019, 13:04