Estoy tratando de hacer este trabajo código, recibirá 2 puntos (x, y) y (x1, y1) de usuario en MAIN y utilizar un método de otra clase y obtener el cálculo.
También sería muy agradable recibir una explicación sobre toString.
import java.util.Scanner;
public class Test{
public static void main(String[]args)
{
Scanner scan = new Scanner(System.in);
double x , y , x1 , y1;
Pytaguras Triangle = new Pytaguras();
System.out.println("Hello , this program is using Pytagoras formula" +
" on the 4 point that you enter");
System.out.println("Please enter 4 points to calculate the distance");
x = scan.nextDouble();
y = scan.nextDouble();
x1 = scan.nextDouble();
y1 = scan.nextDouble();
Triangle.setDouble( x, y, x1, y1);
System.out.println("the distance between 2 points is :" + Triangle.calculate() );
}
}
public class Pytaguras
{
private double x, y, x1 ,y1 ;
public void setDouble(double _x, double _y, double _x1, double _y1)
{ _x=x;
_y=y;
_x1=x1;
_y1=y1;}
public double calculate(double _x , double _y , double _x1 , double _y1 )
{ double s;
s = Math.sqrt((_x-_y)*(_x-_y)+(_x1-_y1)*(_x1-_y1));
return s;
}
}
Si desea recibir la distancia de cálculo a través del método toString()
de la clase Triangle
, sólo tiene que ponerlo en práctica misma como método calculate
:
Posible solución usando toString
Su clase se vería así:
public class Pytaguras {
private double x, y, x1 ,y1 ;
public void setDouble(double _x, double _y, double _x1, double _y1) {
_x=x;
_y=y;
_x1=x1;
_y1=y1;
}
public static double calculate(double _x , double _y , double _x1 , double _y1 ) {
return Math.sqrt((_x-_y)*(_x-_y)+(_x1-_y1)*(_x1-_y1));
}
public String toString() {
return "Distance is " + Math.sqrt((x - y)*(x -y)+(x1 - y1)*(x1 - y1));
}
}
Lo que probablemente salió mal?
Cuando se trató de aplicar toString()
la siguiente manera:
// code omitted for clarity
public double calculate(double _x , double _y , double _x1 , double _y1 ) {
double s; // variable declared locally, thus can be used only inside this method
s = Math.sqrt((_x-_y)*(_x-_y)+(_x1-_y1)*(_x1-_y1));
return s;
}
// code omitted for clarity
public String toString() {
return s; // will give compiler-error, since symbol/variable "s" is not visible here, but only inside method calculate
}
// code omitted for clarity
Refactorización = optimización de su código
utilizar static
el método de utilidad: Su calculation
método no depende de ninguna variable ( x,y,x1,y1
) declaradas dentro de la clase, pero sólo en los parámetros. Por lo tanto, es independiente y se puede hacer static
. Por lo tanto haría una utilidad de método que se puede llamar desde fuera como Pytaguras.calculate(...)
. Ver tutorial de Java en estática .
utilizar el constructor para la inicialización de variables: Sus 2 puntos se pueden inicializar directamente mediante el uso de un constructor. Por lo tanto no es necesario llamar a ambos new Pytaguras()
y setDouble(x1, y1, x2, y2)
. Se podría llamar simplemente new Pytaguras(x1, y1, x2, y2)
. Ver tutorial de Java en el constructor .