Analicemos un poco ahora cómo implementamos los métodos de la clase
Complejo.
public final int intValue() {
return (int)Norma();
}
Ya que no podemos convertir así nomás un complejo en un entero, para implementar estos métodos hemos elegido usar como valor de retorno la norma del complejo. En este caso, y dado que el método Norma() devuelve un float, usamos
typecasting, es decir, lo convertimos en entero precediéndolo con (int).
public final String toString() {
if (y<0)
return x+"-i"+(-y);
else
return x+"+i"+y;
}
Aquí representamos el complejo en forma de cadena de caracteres. Hemos usado el
if para representar adecuadamente el signo de la parte imaginaria. Noten también la asombrosa ayuda que nos brinda Java, al convertir automáticamente las variables x e y a String para la concatenación (mediante el signo "+")!
public static final Complejo Cociente(Complejo c1, Complejo c2) {
float x = c1.x*c2.x+c1.y*c2.y;
float y = -c1.x*c2.y+c1.y*c2.x;
float n = c2.x*c2.x+c2.y*c2.y;
Complejo r = new Complejo(x,y);
return DivEscalar(r,n);
}
Aquí tengan en cuenta que las variables x e y, definidas como
float, no tienen nada que ver con las variables (atributos) de la clase que están definidas al principio de la misma, sino que son variables locales al método.
Podemos usar return DivEscalar(r,n), ya que DivEscalar es un método propio de la clase; no hace falta poner Complejo.DivEscalar.
Qué pasa con r, el new Complejo(x,y) que creamos? Nada; cuando un objeto no se usa más, el "recogedor de basura" de Java lo elimina automáticamente (tarde o temprano) de la memoria.
public final float Norma(Complejo c) {
return (float)Math.sqrt(c.x*c.x+c.y*c.y);
}
Aquí estamos usando otra clase,
Math, que nos permite realizar varias operaciones matemáticas. Esta clase dispone de las constantes E y PI, y los métodos:
abs(x) valor absoluto
acos(x) arco coseno
asin(x) arco seno
atan(x) arco tangente
atan2(x,y) componente angular de la representación polar de x,y
ceil(x) menor entero mayor que x
cos(x) coseno
exp(x) ex
floor(x) mayor entero menor que x
IEEEremainder(x,y) resto de la división x/y según el estándar IEEE 754
log(x) logaritmo natural
max(x,y) el mayor de x e y
min(x,y) el menor de x e y
pow(x,y) xy
random() número aleatorio entre 0 y 1
rint(x) entero más cercano a x (devuelve un doble)
round(x) entero más cercano a x (devuelve un entero o un long)
sin(x) seno
sqrt(x) raíz cuadrada
tan(x) tangente
Algunos de estos métodos disparan
excepciones, como sqrt o log de números negativos. Más adelante veremos cómo se usan las excepciones.
Otra clase que hemos estado usando mucho es la PrintStream, a la que pertenece el método println. En
out es un
atributo de la clase System, del tipo (clase) PrintStream:
public final class System extends Object
{
Fields
public static PrintStream err;
public static InputStream in;
public static PrintStream out;
Methods
.............
}
Veremos otras bibliotecas (para entrada/salida, gráficos, etc) muy pronto. Nos vemos en el capítulo VII.