Tabla de contenidos
Un punto en el plano se puede representar mediante un par de coordenadas x e y, ambas tomando valores en el conjunto de los números reales. En Java podemos representar un punto en el plano mediante una instancia de la siguiente clase:
public class Point { private double x; private double y; }
Programa un constructor para la clase Point
. Debe
recibir como parámetros las dos coordenadas del punto.
El método String toString()
tiene un significado especial en los objetos Java. Es el método
que se utiliza para obtener una representación breve como cadena
de texto del objeto.
Programa el método String toString()
de la clase
Point
para que devuelva una cadena de texto con la
representación del punto como en el siguiente ejemplo: "(23,
-3)". El primer número representa la coordenada
x del punto y el segundo la coordenada
y.
main
Ahora debes probar el código anterior. Programa una clase
llamada TestPoint
que tenga un método
main
. Este método debe recibir como argumentos de
línea de comandos las coordenadas x e
y, crear un nuevo objeto de la clase
Point
con dichas coordenadas e imprimir en la
salida estándar la representación textual de dicho objeto.
El programa debe comprobar que el número de argumentos de línea de comandos recibido sea el correcto.
Ten en cuenta que el método parseDouble
de la clase Double
transforma una cadena de
texto a un tipo primitivo double
.
Es habitual que los atributos de un objeto se declaren como
privados (private
) para evitar accesos
incontrolados desde otros puntos del programa. Si es necesario
que desde el exterior de la clase se acceda a estos atributos,
se proporcionan métodos cuyo nombre empieza, por convenio, con
las cadenas "get
" (acceso en lectura) y
"set
" (acceso en escritura).
Programa en la clase Point
los siguientes métodos,
que devuelven el valor de las coordenadas x
e y:
public double getX() { /* ... */ } public double getY() { /* ... */ }
Modifica el código de tu clase TestPoint
para
comprobar que su comportamiento es correcto.
Programa el siguiente método de la clase Point
que
devuelva la distancia del punto al origen de coordenadas:
public double distance() { /* ... */ }
Sobrecarga el método anterior con el siguiente método, que
recibe como parámetro otro objeto de la clase Point
y
devuelve la distancia entre el punto representado por el objeto
al cual pertenece el método y el objeto recibido como parámetro:
public double distance(Point anotherPoint) { /* ... */ }
Modifica el código de tu clase TestPoint
para
comprobar que el funcionamiento de estos dos métodos sea
correcto.
Programa un método de la clase Point
que devuelva
el cuadrante en el que se encuentra el punto como un valor de
tipo int
:
El prototipo del método se muestra a continuación:
public int quadrant() { /* ... */ }
Modifica el código de tu clase de prueba para comprobar que su comportamiento es correcto.
Programa un método en Point
que reciba como
parámetro un array de objetos de la clase
Point
y devuelva una referencia al objeto de dicho
array que esté más cercano al punto al cual
pertenece el método. El prototipo del método se muestra a
continuación:
public Point nearest(Point[] otherPoints) { /* ... */ }
Modifica el código de tu clase de prueba para comprobar que su comportamiento es correcto.
Triangulo
.
Un triángulo está plenamente definido por sus tres
vértices. Estos vértices se pueden representar como objetos de
la clase Point
.
Programa la clase Triangle
con sus atributos y un
constructor que reciba como parámetro tres vértices del
triángulo (como objetos de la clase Point
).
Programa el método sideLengths()
de la clase
Triangulo
, que debe devolver un array de tres
posiciones, cada una de las cuales debe ser la longitud de uno
de los lados del triángulo. El prototipo del método se muestra a
continuación:
public double[] sideLengths() { /* ... */ }
Programa una clase para probar el correcto funcionamiento de la
clase Triangle
.
Un número racional es aquel que puede ser expresado como una
fracción de dos números enteros. En este ejercicio debes programar
una clase llamada Rational
que represente un número
racional y permita operar con él.
Es muy recomendable que a medida que programas cada nueva funcionalidad en la clase la vayas probando, en vez de esperar a tener la clase completamente programada. A medida que vas resolviendo los distintos apartados, programa una clase de prueba en que vayas comprobando el correcto funcionamiento de cada nueva funcionalidad que vas añadiendo.
Programa la estructura básica de la clase, incluyendo sus atributos y dos constructores. El primer constructor recibe dos enteros (numerador y denominador). El segundo constructor recibe únicamente un entero, y creará un número entero representado como racional, esto es, con denominador 1. Este segundo constructor debe ser implementado mediante una llamada al otro constructor.
Añade el método String
toString()
a esta clase. Debe devolver una
representación textual con el formato de los siguientes
ejemplos: "-5 / 2", "1 / 3", "6", "-7". Fíjate en que cuando el
denominador es 1 se muestra sólo el numerador.
Modifica el primer constructor para que cuando se construyan objetos de la clase, estos se uniformicen automáticamente haciendo las siguientes operaciones:
Probablemente sea una buena decisión de diseño crear un método auxiliar privado que implemente estas operaciones, e invocarlo desde el constructor.
Para calcular el máximo común divisor de dos números puedes copiar el siguiente método en tu clase:
private int gcd() { int a = /* put here the attribute that represents the numerator */ int b = /* put here the attribute that represents the denominator */ while (b != 0) { int tmp = b; b = a % b; a = tmp; } if (a < 0) { a = -a; } return a; }
Añade a la clase un método que reciba otro número racional, como
objeto de la clase Rational
, y devuelva un nuevo objeto de esta clase que
represente la suma del objeto al cual pertenece el método (el
objeto this
) y el objeto que se recibe como
parámetro:
public Rational sum(Rational other) { (...) }
Haz lo mismo que en el apartado anterior, pero en este caso
devuelve un nuevo objeto Rational
que represente el
producto del objeto this
y el objeto que se recibe
como parámetro:
public Rational multiply(Rational other) { (...) }
Sobrecarga los métodos de los apartados anteriores con dos
variantes que admitan como parámetros, en vez de un objeto
Rational
, dos enteros que representen el numerador
y denominador del otro número. Para reutilizar código,
impleméntalos de tal forma que en lugar de resolver el producto
o suma directamente, invoquen a los métodos de los dos apartados
anteriores para hacerlo:
public Rational sum(int otherNumerator, int otherDenominator) { (...) } public Rational multiply(int otherNumerator, int otherDenominator) { (...) }