[英]Finding min and max as a pair java
我希望給定一個點(任意數量的點)的程序從所有點中獲取笛卡爾平面中的最近點和最遠點,然后計算最接近最遠點的距離。
我有下面的代碼查找最小x和最小y,以及最大x和最大y,但是我希望兩個最小是成對的,兩個最大是成對的。 我在某些測試數據上沒有得到正確的答案,但是在某些測試數據上卻得到了正確的答案。
為簡單起見,我只考慮笛卡爾平面中的正x和y。
import java.lang.Math;
import java.util.Scanner;
class Point
{
double x;
double y;
}
class Compare
{
Double maxx;
Double maxy;
Double minx;
Double miny;
public void maxx(double num)
{
if (maxx == null)
maxx = num;
else if(num > maxx)
maxx = num;
}
public void maxy(double num)
{
if (maxy == null)
maxy = num;
else if(num > maxy)
maxy = num;
}
public void minx(double num)
{
if (minx == null)
minx = num;
else if(num < minx)
minx = num;
}
public void miny(double num)
{
if (miny == null)
miny = num;
else if(num < miny)
miny = num;
}
}
class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
Compare compare = new Compare();
int n = input.nextInt();
if(n>=2 && n<=30)
{
for (int i = 0; i < n; i++)
{
Point points = new Point();
points.x = input.nextDouble();
points.y = input.nextDouble();
compare.minx(points.x);
compare.miny(points.y);
compare.maxx(points.x);
compare.maxy(points.y);
}
}
double dis;
dis=Math.sqrt((compare.maxx-compare.minx)*(compare.maxx-compare.minx) + (compare.maxy-compare.miny)*(compare.maxy-compare.miny));
System.out.printf("%.4f\n",dis);
}
}
Math.hypot的用例。
當相對於原點(0,0)的最大值和最小值時:
Point min = null;
double minDistance = Double.MAX_VALUE;
Point max = null;
double maxDistance = 0.0;
for (int i = 0; i < n; i++) {
Point point = new Point();
point.x = input.nextDouble();
point.y = input.nextDouble();
double distanceToO = Math.hypot(point.x, point.y);
if (min == null || minDistance > distanceToO) {
minDistance = distanceToO;
min = point;
}
if (max == null || maxDistance < distanceToO) {
maxDistance = distanceToO;
max = point;
}
}
當最小和最大關注點時,兩個讀取點之間的距離為:
Point minFrom = null;
Point minTo = null;
double minDistance = Double.MAX_VALUE;
Point maxFrom = null;
Point maxTo = null;
double maxDistance = 0.0;
Point[] points = new Point[n];
for (int i = 0; i < n; i++) {
Point point = new Point();
point.x = input.nextDouble();
point.y = input.nextDouble();
points[i] = point;
}
for (int i = 0; i < n; i++) {
Point pointI = points[i];
for (int j = i + 1; j < n; j++) {
Point pointJ = points[j];
double distance = Math.hypot(
pointJ.x - pointI.x,
pointJ.y - pointI.y);
if (minFrom == null || minDistance > distance) {
minDistance = distance;
minFrom = pointI;
minTo = pointJ;
}
if (maxFrom == null || maxDistance < distance) {
maxDistance = distance;
maxFrom = pointI;
maxTo = pointJ;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.