英文:
I am trying to calculate the Distance Between 2 points in Java
问题
import java.util.Random;
class MainLab_2 {
private static Random rand = new Random();
private static int getInt() {
int z = rand.nextInt(199) - 99; // Generate random number from -99 to 99
return z;
}
public static void main(String[] args) {
Point p1 = new Point(getInt(), getInt());
Point p2 = new Point(getInt(), getInt());
Line line = new Line(p1, p2);
System.out.println(p1.toString());
System.out.println(p2.toString());
System.out.println(line.toString());
}
}
class Point {
private int x, y;
public Point() {
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point(Point p) {
this(p.x, p.y);
}
private double distance(Point p) {
return Math.sqrt((p.y - this.y) * (p.y - this.y) + (p.x - this.x) * (p.x - this.x));
}
public double getDistance(Point p) {
return distance(p);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void set(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return String.format("Given Point (%d, %d)%n", getX(), getY());
}
}
class Line {
private Point p1, p2;
public Line() {
}
public Line(Point p1, Point p2) {
this.p1 = new Point(p1);
this.p2 = new Point(p2);
}
public Line(Line aline) {
this(aline.p1, aline.p2);
}
public double getDistance() {
return p1.getDistance(p2);
}
public Point getP1() {
return p1;
}
public Point getP2() {
return p2;
}
public void set(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
public String toString() {
return String.format("Line (Point(%d,%d), Point(%d,%d), distance = %.4f)%n",
p1.getX(), p1.getY(), p2.getX(), p2.getY(), getDistance());
}
}
Note: I've made corrections to the provided code. Please use this corrected code to achieve the desired functionality of generating random points and calculating distances.
英文:
import java.util.Random;
class MainLab_2 {
private static Random rand;
private static int getInt() {
int z = rand.nextInt() * 100;
return z;
}
private void getTwoPoints(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
private static void main(String[] args) {
Point p1 = new Point(getInt(), getInt());
Point p2 = new Point(getInt(), getInt());
}
}
class Point {
private static int x, y;
// Default Constructor
public Point() {
}
// Other constructor
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// Copy constructor
public Point(Point p) {
this(p.x, p.y);
}
private static double distance(Point p) {
return Math.sqrt((p.y - this.y) * (p.y - this.y)
+ (p.x - this.x) * (p.x - this.x));
}
// Accessor Method
public double getDistance(Point p) {
return distance(Point p);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
// Mutator Method
public void set(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return String.format("Given Point (%d, %d%n)", getX(),
getY());
}
}
class Line {
private static Point p1, p2;
public Line() {
}
public Line(Point p1, Point p2) {
this(p1);
this.p2 = new Line(p2);
}
public Line(Line aline) {
this(aline.p1, aline.p2);
}
// Accessor Method
public double getDistance() {
return Point.getDistance(Point p);
}
public Point getP1() {
return p1;
}
public Point getP2() {
return p2;
}
// Mutator Method
public void set(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
private String toString() {
return String.format ("Line (Point(%d,%d), Point(%d,%d), distance = %d%n )",
p1.x,p1.y,p2.x,p2.y,getDistance())
}
As attached above, is my script.
Firstly I'm trying to randomly generate any 2 number from -99 to 99.
After generating I'll pass this 2 number into my class Point as
(x, y).
Generate 2 points (p.x, p.y) and (this.x, this.y) before calculating the distance between the 2 points. The formula I'm currently using was found online.
My End Results to get is a few sets of e.g
Set 1
Given Point (-13,90)
Given Point (39, 16)
Line (Point (-13,90),Point (39, 16), distance = 90.4434 )
Set 2
Given Point (89,24)
Given Point (33, -68)
Line (Point (89,24),Point (23, -68), distance = 113.2254 )
I hope to random 2 numbers from my main class and pass it to my class Point. And in my class Line I'm able to generate 2 points and calculate the distance between them. However, I'm unable to do that. with my current script. It will be very helpful if somebody can give me some guidance on how I can correct it. I'm fairly new to java and really hope I can get some pointers and step by step guidance on this. Thank you.
答案1
得分: 1
这并没有解决您的问题,因为您的代码存在严重问题。以下将指出其中一些问题。
class MainLab_2 {
类MainLab_2中没有p1
和p2
这些点。而且甚至不清楚为什么这个方法应该存在。
private void getTwoPoints(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
主入口点需要是public的。
private static void main(String[] args) {
Point p1 = new Point(getInt(), getInt());
Point p2 = new Point(getInt(), getInt());
}
}
class Point {
这些不应该是静态的,否则所有的点将与您创建的最后一个点具有相同的值。它们需要是实例字段。
private static int x, y;
在静态上下文中无法使用this
。静态方法不知道this
指的是什么。
private static double distance(Point p) {
return Math.sqrt((p.y - this.y) * (p.y - this.y)
+ (p.x - this.x) * (p.x - this.x));
}
class Line {
这些同样不应该是静态的。
private static Point p1, p2;
您没有单参数的Line构造函数,也不合理。
public Line(Point p1, Point p2) {
this(p1); // <-- 这个构造函数引用不存在
this.p2 = new Line(p2);
}
将其设为私有将没有太大用处。它应该可以被此类的所有用户调用。
private String toString() {
return String.format ("Line (Point(%d,%d), Point(%d,%d), distance = %d%n )",
p1.x,p1.y,p2.x,p2.y,getDistance())
}
总结一下:
- 理解静态和非静态之间的区别。
- 阅读有关构造函数以及如何使用它们的内容。
- 了解不同的访问修饰符。
查阅Java教程获取更多信息。
英文:
This does not address your question as you have serious problems in your code. This will point some of them out to you.
class MainLab_2 {
There are no points p1
, and p2
in class MainLab_2. Nor is it clear why this method should even be here.
private void getTwoPoints(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
The main entry point needs to be public
private static void main(String[] args) {
Point p1 = new Point(getInt(), getInt());
Point p2 = new Point(getInt(), getInt());
}
}
class Point {
These should not be static, otherwise all your points will have the same values as the last one you created. They need to be instance fields.
private static int x, y;
You can't use this
within a static context. A static method has no idea what this
refers to.
private static double distance(Point p) {
return Math.sqrt((p.y - this.y) * (p.y - this.y)
+ (p.x - this.x) * (p.x - this.x));
}
class Line {
Once again theses should not be static.
private static Point p1, p2;
you have no single argument Line constructor, nor would it make sense.
public Line(Point p1, Point p2) {
this(p1); // <-- this constructor reference doesn't exist
this.p2 = new Line(p2);
}
This won't be of much use making it private. It should be able to called by
all users of this class.
private String toString() {
return String.format ("Line (Point(%d,%d), Point(%d,%d), distance = %d%n )",
p1.x,p1.y,p2.x,p2.y,getDistance())
}
To summarize.
- Understand the difference between static and non-static
- Read up on constructors and how they should be used.
- learn about the different access modifiers.
Check out The Java Tutotals for more information.
答案2
得分: -1
这是使用不可变对象的简单解决方案。
Point.java
public class Point {
private static final int LOW = -100;
private static final int HIGH = 100;
private static final Random rand = new Random();
private static int rand() {
return rand.nextInt(HIGH - LOW) + LOW;
}
private final int x;
private final int y;
public Point() {
this(rand(), rand());
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public double getDistance(Point p) {
return Math.hypot(x - p.x, y - p.y);
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
Line.java
public class Line {
private final Point p1;
private final Point p2;
private final double length;
public Line() {
this(new Point(), new Point());
}
public Line(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
this.length = p1.getDistance(p2);
}
public Point getP1() {
return p1;
}
public Point getP2() {
return p2;
}
public double getLength() {
return length;
}
@Override
public String toString() {
return "Line [p1=" + p1 + ", p2=" + p2 + ", length=" + length + "]";
}
public static void main(String[] args) {
Line l1 = new Line();
Line l2 = new Line();
System.out.println(l1);
System.out.println(l2);
}
}
英文:
Here is a simple solution using immutable objects.
Point.java
public class Point {
private static final int LOW = -100;
private static final int HIGH = 100;
private static final Random rand = new Random();
private static int rand() {
return rand.nextInt(HIGH - LOW) + LOW;
}
private final int x;
private final int y;
public Point() {
this(rand(), rand());
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public double getDistance(Point p) {
return Math.hypot(x - p.x, y - p.y);
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
Line.java
public class Line {
private final Point p1;
private final Point p2;
private final double length;
public Line() {
this(new Point(), new Point());
}
public Line(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
this.length = p1.getDistance(p2);
}
public Point getP1() {
return p1;
}
public Point getP2() {
return p2;
}
public double getLength() {
return length;
}
@Override
public String toString() {
return "Line [p1=" + p1 + ", p2=" + p2 + ", length=" + length + "]";
}
public static void main(String[] args) {
Line l1 = new Line();
Line l2 = new Line();
System.out.println(l1);
System.out.println(l2);
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论