所以这是我遇到困难的任务的要点:
编写一个名为Point的java类来表示一个N维点(坐标为双精度)
跟踪每个创建的点
编写一个名为Line的java类来表示一行(带有起点和终点)
所以我创建了我的直线和点类,但我不确定我是否正确创建了我的直线或点类。我已经将主要方法设计为从控制台获取输入并将该输入存储到两个不同的坐标数组中。当我尝试在我的主要方法中调用此方法来打印坐标和距离时,我会返回输出:
(4.0,5.0)之间的距离 (2.0,3.0) (0.0,0.0) 是>
所以我希望我可以帮助澄清我是否正在创建我的构造函数和其他所有内容。到目前为止,这是我的两个类的代码:
public class Point{
private double[] coordinate1;
private double[] coordinate2;
public Point(double[] array1, double[] array2){
this.coordinate1 = array1;
this.coordinate2 = array2;
}
//method to get array inputs and copy them
public void copy(double[] points1, double[] points2){
double[] coordinate1 = new double[points1.length +1];
for(int copyIndex = 0; copyIndex < points1.length; copyIndex++){
coordinate1[copyIndex] = points1[copyIndex];
}
points1 = coordinate1;
double[] coordinate2 = new double[points2.length +1];
for(int copyIndex = 0; copyIndex < points2.length; copyIndex++){
coordinate2[copyIndex] = points2[copyIndex];
}
points2 = coordinate2;
}
//method to print the coordinates
public void printArray(){
double array1 = coordinate1.length;
double array2 = coordinate2.length;
for (int i = 0; i < array1 && i < array2; i++) {
System.out.println("( " + coordinate1[i] + " , " + coordinate2[i] + " ) ");
}
}
}
public class Line{
private double[] coordinate1;
private double[] coordinate2;
private double distance;
public Line(double[] array1, double[] array2){
this.coordinate1 = array1;
this.coordinate2 = array2;
}
public double getLine(double[] coordinate1, double[] coordinate2){
double diffSquareSum = 0.0;
for(int i=0;i<coordinate1.length;i++) {
diffSquareSum += (coordinate1[i] - coordinate2[i]) * (coordinate1[i] - coordinate2[i]);
}
distance = Math.sqrt(diffSquareSum);
return distance;
}
public String toString(){
return "The distance is " + distance;
}
}
如果我需要澄清或扩展我的问题,请告诉我。感谢任何帮助。谢谢。 以下是程序运行时预期的输出:
示例:
输入#1维度#1或“随机”或“退出”或“帮助”或空行以继续:3.14 输入点#1尺寸#2或“随机”或“退出”或“帮助”或空白行继续:0 输入#1维度#3或“随机”或“退出”或“帮助”或空行以继续:
输入#2维#1或“随机”或“退出”或“帮助”或空行以继续:0 输入#2维#2或“随机”或“退出”或“帮助”或空行以继续:hEl
输入#2维#2或“随机”或“退出”或“帮助”或空行以继续:2.71 输入#2维#3或“随机”或“退出”或“帮助”或空行以继续: (3.14,0.0)和(0.0,2.71)之间的距离是4.147734321289154
输入#1维度#4或“随机”或“退出”或“帮助”或空白行以继续:随机 - &GT; -75.1234 输入#1维#5或“随机”或“退出”或“帮助”或空行以继续: 输入点#2尺寸#1或“随机”或“帮助”或“退出”或空行以继续:RA - &GT; 38.12851983534693 输入点#2尺寸#2或“随机”或“帮助”或“退出”或空白行以继续:rAnD - &GT; 74.31366638262983
输入#2维#3或“随机”或“帮助”或“退出”或空行以继续: 哎哟 - 你试图用不同尺寸的点创建一条线!
输入#1维度#1或“随机”或“退出”或“帮助”或空行以继续:退出
你创造了4分: (3.14,0.0) (0.0,2.71) (-75.1234) (38.12851983534693,74.31366638262983) 你创建了1行: (3.14,0.0)至(0.0,2.71),长度4.147734321289154
因此它不断要求坐标双打并创建一条线,然后打印出程序关闭后生成的所有线条。希望有助于澄清作业需要的内容
答案 0 :(得分:2)
目前尚不清楚为什么你的构造函数会有2个数组 - 似乎只有1个数组来表示所有N个可能的轴。
此外,还不清楚如何将坐标传递给构造函数。
像这样使用多个参数?
public class Point {
private double[] coordinates;
public Point(double...coordinates) {
this.coordinates = coordinates;
}
}
或者像这样使用数组?
public class Point {
private double[] coordinates;
public Point(double[] coordinates) {
this.coordinates = coordinates;
}
}
复制方法应该有这个签名:
Point copy();
以便您返回当前实例的副本。
Line类的要求表明构造函数需要两个Point
s,所以它看起来应该类似于:
public Line(Point p1, Point p2);
以及使用p1
和p2
的方法。
答案 1 :(得分:1)
您只需要一个数组来表示每个点。数组的长度将告诉您该点的维度。您的代码基本上是一个硬编码的2D点。正确的用法应该是这样的:
double[] coordinate1 = {0.0};// 1d coordinate
double[] coordinate2 = {0.0,1.0};// 2d coordinate
double[] coordinate3 = {0.0,1.0,2.0};// 3d coordinate
Point point1 = new Point(coordinate1);// 1d point
Point point2 = new Point(coordinate2);// 2d point
Point point3 = new Point(coordinate3);// 3d point
int dimension = point1.getCoordinates().length;
你的线类将有两个Point类型的变量通过构造函数传入。你可以制作两种快速方法
public boolean isSameDimension(Point p1, Point p2)
{
if(p1.getDimension() == p2.getDimension())
return true;
return false;
}
public int getDimension()//In point class
{
return getCoordinates().length;
}