程序允许您在N维空间中指定点

时间:2017-02-20 21:40:48

标签: java

所以这是我遇到困难的任务的要点:

  • 编写一个名为Point的java类来表示一个N维点(坐标为双精度)

    • 构造函数应该采用任意数量的坐标
    • 该类应具有任何坐标的访问方法
    • 编写toString()和copy()以及equals()辅助方法
    • 跟踪每个创建的点

    • 编写一个名为Line的java类来表示一行(带有起点和终点)

    • 构造函数参数是起点和终点
    • 当2个点的维度不同时,构造函数必须抛出错误
    • 编写toString()和copy()以及equals()辅助方法
    • 提供getLineLength()方法 - 在wiki上查找“Euclidian Distance”
    • 跟踪每个创建的行

所以我创建了我的直线和点类,但我不确定我是否正确创建了我的直线或点类。我已经将主要方法设计为从控制台获取输入并将该输入存储到两个不同的坐标数组中。当我尝试在我的主要方法中调用此方法来打印坐标和距离时,我会返回输出:

(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

  • 此程序允许您在N维空间中指定点:
    • 每个点可以有不同数量的非零坐标
    • 您可以通过键入“RANDOM”
    • 为任何坐标请求随机数
    • 完成进入坐标后,只需按键
    • 即可
  • 成对点用于创建线条
    • 如果2个点的尺寸不匹配,将显示错误
    • 创建线条时,提供线距
  • 完成指定点和线后,键入“EXIT”以显示最终操作统计信息
  • 所有关键词都不区分大小写且可以删除
  • 随机数将在-1,000.00和+1,000.00
  • 之间缩放

输入#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

因此它不断要求坐标双打并创建一条线,然后打印出程序关闭后生成的所有线条。希望有助于澄清作业需要的内容

2 个答案:

答案 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);

以及使用p1p2的方法。

答案 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;
}