簡體   English   中英

查找最小和最大成對java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM