繁体   English   中英

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

[英]program allows you specify points in N-dimensional space

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

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

    • 构造函数应该采用任意数量的坐标
    • 该类应具有任何坐标的访问器方法
    • 编写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或“随机”或“退出”或“帮助”或空行继续:随机 - > -75.1234输入点#1尺寸#5或“随机”或“退出”或“帮助”或空行继续:输入#2维#1或“随机”或“帮助”或“退出”或空白行继续:RA - > 38.12851983534693输入#2维#2或“随机”或“帮助” “或”退出“或空白行继续:rAnD - > 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个数组 - 似乎应该只有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所以它看起来应该类似于:

public Line(Point p1, Point p2);

以及使用p1p2的方法。

您只需要一个数组来表示每个点。 数组的长度将告诉您该点的维度。 您的代码基本上是一个硬编码的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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM