[b]Create a class called Complex for performing arithmetic with complex numbers. Write a driver program to test your class.
Complex numbers have the form
realPart + imaginaryPart * i
where i is : raiz quadrada de -1
Use floating-point variables to represent the private data of the class. Provide a constructor method that enables an object of this class to be initialized when it is declared. Provide a no-argument constructor with default values in case no initializers are provided. Provide public methods for each of the following:
Addition of two Complex numbers: The real parts are added together and the imaginary parts are added together.
Subtraction of two Complex numbers: The real part of the right operand is subtracted from the real part of the left operand and the imaginary part of the right operand is subtracted from the imaginary part of the left operand.
Printing Complex numbers in the form (a, b), where a is the real part and b is the imaginary part.
[/b]
[code]// Exercise 8.2 Solution
// Complex.java
// Definition of class Complex
public class Complex {
private double real;
private double imaginary;
// Initialize both parts to 0
public Complex() { this( 0.0, 0.0 ); }
// Initialize real part to r and imaginary part to 0
public Complex( double r ) { this( r, 0.0 ); }
// Initialize real part to r and imaginary part to i
public Complex( double r, double i )
{
real = r;
imaginary = i;
}
// Add two Complex numbers
public Complex add( Complex right )
{
return new Complex( real + right.real,
imaginary + right.imaginary );
}
// Subtract two Complex numbers
public Complex subtract( Complex right )
{
return new Complex( real - right.real,
imaginary - right.imaginary );
}
// Return String representation of a Complex number
public String toString()
{ return “(” + real + ", " + imaginary + “)”; }
}
Primeira dúvida é sobre esse sobre o this—> quando ele faz this()
// Exercise 8.2: ComplexTest.java
// Test the Complex number class
import javax.swing.*;
public class ComplexTest {
public static void main( String args[] )
{
Complex a, b;
a = new Complex( 9.9, 7.7 );
b = new Complex( 1.2, 3.1 );
String result = "a = " + a;
result += "\nb = " + b;
result += "\na + b = " + a.add( b );
result += "\na - b = " + a.subtract( b );
JOptionPane.showMessageDialog(
null, result, "Complex Test",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
[/code]
Primeira dúvida é -->sobre o uso do this —> quando ele faz public Complex() { this( 0.0, 0.0 );}
isso é igual a ---> public Complex() {real = 0.0; imaginary = 0.0 ); } ??????
Segunda dúvida é —>O metodo add como ele funciona , por exemplo como ele sabe que o valor de real = 9.9(ou seja valor real do objeto a) e não o ultimo valor que foi passado quando ele criou o objeto b
o valor de right.real eu entendi que ele pega o valor real do objeto b uma vez que ele é passado como parâmetro na classe ComplexTest okay entendido
Terceira dúvida é ----> Ultima duvida, se vocês debugarem o código verão que ele funciona da seguinte forma : 1- o objeto é criado através de uma instrução new com os valores passados como parâmetro, então o construtor é chamado e inicializa esses valores nos atributos privados da classe o comando retorna à classe ComplexTest e faz o mesmo processo para o obejto b 2- pulando para a chamada do método add e vi que ele calcula as somas das partes real e imaginaria dos dois objetos e então retorna esse valor para o construtor novamente , por que isso acontece ??? e por que depois que a linha de execução sai do construtor ele volta novamente para a primeira linha do método add ???
Agradeço a ajuda por que uma vez entendendo isso acredito que todo o processo de criação de objetos e chamadas de métodos estarão claros na minha cabeça após isso