Originariamente inviato da VincenzoTheBest
Puoi risolvere astraendo un po'. Ad esempio ti crei una classe Espressione, che dunque è costituita da operandi ed operatori.
Va bene, in quanto lo fai all'interno della classe stessa.
Ty, solo ora ho letto il tuo post!!
Si ovviamente sarebbe un altro metodo efficace crearmi un'altra classe espressione; tuttavia in questo caso penso sia un di più e che per adesso vada bene inserire solo i numeri.
Ecco la classe da me proposta, insieme al programma vero e proprio.
codice:
public class Line
{
// Constructors
public Line (double x, double y, double m)
{
initPointX = x;
initPointY = y;
slope = m;
}
public Line (double x1, double y1, double x2, double y2)
{
initPointX = x1;
initPointY = y1;
double endPointX = x2;
double endPointY = y2;
slope = (endPointY - initPointY) / (endPointX - initPointX);
}
public Line (double m, double a)
{
slope = m;
initPointX = 0;
initPointY = a;
}
public Line (double a)
{
initPointX = a;
initPointY = 0;
slope = Double.MAX_VALUE;
}
// Methods
public boolean isParallel(Line other)
{
return(this.slope == other.slope);
}
public boolean isEqual(Line other)
{
int equal = 0;
if (this.slope == other.slope && this.initPointX == other.initPointX && this.initPointY == other.initPointY)
equal = 1;
return (equal == 1);
}
public boolean intersects(Line other)
{
return (!this.isEqual(other) && !this.isParallel(other));
}
// Instance Fields
private double initPointX, initPointY;
private double slope;
}
//Programma
import javax.swing.JOptionPane;
public class LineRunner
{
public static void main(String[] args)
{
JOptionPane pane = new JOptionPane();
String sChoice = pane.showInputDialog("In che modo vuoi costruire la linea:\n1.Coordinate punto e pendenza;\n2.Coordinate due punti;\n"
+ "3.Equazione del tipo y=mx+b, inserendo m e b;\n4.Equazione del tipo x=a, inserendo a (retta verticale)");
double initPointX, initPointY, endPointX, endPointY, slope, intercept;
Line line = null;
if(sChoice.equals("1"))
{
String sX1 = pane.showInputDialog("Inserisci coordinata x del punto iniziale: ");
String sY1 = pane.showInputDialog("Inserisci coordinata y del punto iniziale: ");
String sM = pane.showInputDialog("Inserisci coefficiente angolare m della retta: ");
initPointX = Double.parseDouble(sX1);
initPointY = Double.parseDouble(sY1);
slope = Double.parseDouble(sM);
line = new Line (initPointX, initPointY, slope);
}
else if(sChoice.equals("2"))
{
String sX1 = pane.showInputDialog("Inserisci coordinata x del punto iniziale: ");
String sY1 = pane.showInputDialog("Inserisci coordinata y del punto iniziale: ");
String sX2 = pane.showInputDialog("Inserisci coordinata x del punto finale: ");
String sY2 = pane.showInputDialog("Inserisci coordinata y del punto finale: ");
initPointX = Double.parseDouble(sX1);
initPointY = Double.parseDouble(sY1);
endPointX = Double.parseDouble(sX2);
endPointY = Double.parseDouble(sY2);
line = new Line (initPointX, initPointY, endPointX, endPointY);
}
else if(sChoice.equals("3"))
{
String sM = pane.showInputDialog("Inserisci coefficiente angolare m: ");
String sB = pane.showInputDialog("Inserisci l'intercetta b: ");
slope = Double.parseDouble(sM);
intercept = Double.parseDouble(sB);
line = new Line (slope, intercept);
}
else if(sChoice.equals("4"))
{
String sA = pane.showInputDialog("Inserisci intercetta a (retta verticale): ");
intercept = Double.parseDouble(sA);
line = new Line (intercept);
}
else
pane.showMessageDialog(null, "Unvalid entry");
pane.showMessageDialog(null, "Costruisci la seconda linea");
Line line2 = null;
JOptionPane pane2 = new JOptionPane();
String sChoice2 = pane.showInputDialog("In che modo vuoi costruire la seconda linea:\n1.Coordinate punto e pendenza;\n2.Coordinate due punti;\n"
+ "3.Equazione del tipo y=mx+b, inserendo m e b;\n4.Equazione del tipo x=a, inserendo a (retta verticale)");
if(sChoice2.equals("1"))
{
String sX1 = pane.showInputDialog("Inserisci coordinata x del punto iniziale: ");
String sY1 = pane.showInputDialog("Inserisci coordinata y del punto iniziale: ");
String sM = pane.showInputDialog("Inserisci coefficiente angolare m della retta: ");
initPointX = Double.parseDouble(sX1);
initPointY = Double.parseDouble(sY1);
slope = Double.parseDouble(sM);
line2 = new Line (initPointX, initPointY, slope);
}
else if(sChoice2.equals("2"))
{
String sX1 = pane.showInputDialog("Inserisci coordinata x del punto iniziale: ");
String sY1 = pane.showInputDialog("Inserisci coordinata y del punto iniziale: ");
String sX2 = pane.showInputDialog("Inserisci coordinata x del punto finale: ");
String sY2 = pane.showInputDialog("Inserisci coordinata y del punto finale: ");
initPointX = Double.parseDouble(sX1);
initPointY = Double.parseDouble(sY1);
endPointX = Double.parseDouble(sX2);
endPointY = Double.parseDouble(sY2);
line2 = new Line (initPointX, initPointY, endPointX, endPointY);
}
else if(sChoice2.equals("3"))
{
String sM = pane.showInputDialog("Inserisci coefficiente angolare m: ");
String sB = pane.showInputDialog("Inserisci l'intercetta b: ");
slope = Double.parseDouble(sM);
intercept = Double.parseDouble(sB);
line2 = new Line (slope, intercept);
}
else if(sChoice2.equals("4"))
{
String sA = pane.showInputDialog("Inserisci intercetta a (retta verticale): ");
intercept = Double.parseDouble(sA);
line2 = new Line (intercept);
}
else
pane.showMessageDialog(null, "Unvalid entry");
if(line.intersects(line2))
pane.showMessageDialog(null, "Le rette sono secanti");
else if(line.isEqual(line2))
pane.showMessageDialog(null, "Le rette sono uguali");
else if(line.isParallel(line2))
pane.showMessageDialog(null, "Le rette sono parallele");
System.exit(0);
}
}