Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Francky92 en 1 Marzo 2015, 19:51 pm



Título: Clase Rectangulo
Publicado por: Francky92 en 1 Marzo 2015, 19:51 pm
¿Alguien me puede ayudar a programar la clase rectangulo para que pueda ejecutarse el siguiente codigo?

Código
  1. public static void main(String[] args) {
  2. int i=0;
  3. Rectangulo [] rec =new Rectangulo[5];
  4. final int num=5;
  5. for (i=0;i<num,;i++)
  6. {
  7. rec[i]= new Rectangulo(i+1,(i+1)*(i+2));
  8. }
  9. }
  10.  
  11. Gracias de antemano

Mod: al publicar código, usa las etiquetas GeSHi


Título: Re: Clase Rectangulo
Publicado por: peib0l en 1 Marzo 2015, 21:30 pm
Ese codigo esta mal por donde lo mires, deberías seguir la ortodoxia de java, pero bueno

Código
  1. public class Rectangulo {
  2.  
  3.    int ancho;
  4.    int alto;
  5.  
  6.   public Rectangulo(alto, ancho){
  7.         this.alto = alto;
  8.         this.ancho = ancho;
  9.    }
  10.  
  11.  
  12. }

Mod: al publicar código usa las GeSHi  :¬¬


Título: Re: Clase Rectangulo
Publicado por: Francky92 en 1 Marzo 2015, 21:41 pm
pues es codigo dado por el profesor.
y como rectificas ese codigo para que funcione con la clase que has dado?


Título: Re: Clase Rectangulo
Publicado por: Usuario Invitado en 1 Marzo 2015, 22:07 pm
Código
  1. public class Rectangle {
  2. private String color;
  3. private int width;
  4. private int height;
  5.  
  6. public Rectangle() {}
  7.  
  8. public Rectangle(String color, int width, int height) {
  9.  this.color = color;
  10.  this.width = width;
  11.  this.height = height;
  12. }
  13.  
  14. public String getColor() { return color; }
  15.  
  16. public void setColor(String color) { this.color = color; }
  17.  
  18. public int getWidth() { return width; }
  19.  
  20. public void setWidth(int width) { this.width = width; }
  21.  
  22. public int getHeight() { return height; }
  23.  
  24. public void setHeight(int height) { this.height = height; }
  25.  
  26. @Override
  27. public String toString() {
  28.  String data = "Este rectángulo es de color "+color+
  29.   " y tiene "+width+"px de ancho y "+height+"px de alto";
  30.  return data;
  31. }
  32.  
  33. }

Código
  1. import java.util.List;
  2. import java.util.ArrayList;
  3. import java.util.Random;
  4.  
  5. public class RectangleTest {
  6. public static void main(String[] args) {
  7.  List<Rectangle> rectangleList = new ArrayList<>();
  8.  final String[] COLORS = {"Blue", "Coral", "Orange red", "Green", "Gray"};
  9.  final int RECTANGLE_SIZE = 50;
  10.  for(byte i=1; i<=5; i++) {
  11.   Rectangle rectangle = new Rectangle();
  12.   String color = COLORS[new Random().nextInt(COLORS.length)];
  13.   rectangle.setColor(color);
  14.   rectangle.setWidth(i * RECTANGLE_SIZE);
  15.   rectangle.setHeight(i * RECTANGLE_SIZE);
  16.   rectangleList.add(rectangle);
  17.  }
  18.  for(byte i=0; i<rectangleList.size(); i++) {
  19.   System.out.println("Rectángulo "+ (i+1)+": "+rectangleList.get(i));
  20.  }
  21.  
  22. }
  23. }

Código limpio = fácil de entender + fácil de mantener.


Título: Re: Clase Rectangulo
Publicado por: Baal_30 en 1 Marzo 2015, 22:46 pm
Gus si que da gusto leer tus códigos ¡! haha :D

Pero me surgen un par de dudas :

1- ¿Porque en el main colors y size los declaras como final?

2- ¿Porque en los for declaras la "i" como byte?

3- Y... ¿en color no tendría que ser String[] en vez de int? ¿O me confundo yo?

Merci :)


Título: Re: Clase Rectangulo
Publicado por: Usuario Invitado en 1 Marzo 2015, 23:06 pm
1) Es para ilustrar, en este caso no tiene sentido. Lo puse para ilustrar por qué debe ser una constante estática. Esto aplica si COLORS fuese una propiedad. Los colores se suponen que están pre-establecidos es decir que se puede crear uno, por lo que solo me interesa que:

  • Sea estático (static)
  • Sea constante (final)

Cuando declaras una variable u objeto como static, estás indicando que dicha variable/objeto solo tendrá una instancia que será compartida por todo aquel objeto del que sea propiedad. Si creas 5 objetos de dicha clase los 5 objetos compartirán dicha variable, ya no será una variable que pertenezca al objeto si no que dicha variable pertenece a la clase. Por eso, si el objeto 3 actualiza la variable y el objeto 5 accede a ella, el valor será el que actualizó el objeto 3.

Cuando declaras una variable/objeto como final, estás indicando que dicha variable/objeto es una constante cuyo valor no cambiará.

Por lo que static + final = Constante de la que solo habrá una instancia.

2) Declaro la variable de control como byte porque la lista a recorrer será muy pequeña (5). Si utilizo int estaría usando 4 bytes mientras que con byte solo 1. Es por cuestión de rendimiento aunque no afecte casi nada xD. Pero si un tipo de dato es mejor para X operación, debes usarlo.

3) Si, me equivoqué ^^, pero ya lo corregí.

Ejecutando lo anterior, se obtiene:

Código:
Rectángulo 1: Este rectángulo es de color Blue y tiene 50px de ancho y 50px de alto
Rectángulo 2: Este rectángulo es de color Blue y tiene 100px de ancho y 100px de alto
Rectángulo 3: Este rectángulo es de color Gray y tiene 150px de ancho y 150px de alto
Rectángulo 4: Este rectángulo es de color Orange red y tiene 200px de ancho y 200px de alto
Rectángulo 5: Este rectángulo es de color Green y tiene 250px de ancho y 250px de alto


Título: Re: Clase Rectangulo
Publicado por: Baal_30 en 2 Marzo 2015, 08:45 am
Que grande, gracias Gus por las aclaraciones :)