这题纯恶心人,要考虑的情况非常多,包括两条直线都是铅垂线,然后重合,这个时候斜率是不存在的,需要注意,然后测试案例里面还有平行的情况,我一开始以为没有的,调试了一段时间才发现是平行的问题,还有就是应当学到,如果返回的结果中有NaN,就很有可能是由于做除法的时候分母为零导致

import java.util.*;

public class Main {
    static class Point {
        public double x, y;
        public Point(double x, double y) {
            this.x = x;
            this.y = y;
        }
        public Point() {
            this(0.0, 0.0);
        }
    }

    static class Line {
        public Point point_A, point_B;
        public Line(Point a, Point b) {
            point_A = a;
            point_B = b;
        }
        public Line() {
            point_A = new Point();
            point_B = new Point();
        }
    }

    public static Point findMeetingPoint(Line lineA, Line lineB) {
        // TODO: 求直线 lineA 与 lineB 的交点
        // TODO: 求直线 lineA 与 lineB 的交点
		Point point=new Point();
		if(lineA.point_A.x==lineA.point_B.x) {
			if(lineB.point_A.x==lineB.point_B.x) {
					point.x=-1;
					point.y=-1;
					return point;
				
			}else {
				double k2=(lineB.point_A.y-lineB.point_B.y)/(lineB.point_A.x-lineB.point_B.x);
				double b2=lineB.point_A.y-k2*lineB.point_A.x;
				point.x=lineA.point_A.x;
				point.y=k2*point.x+b2;
				return point;
			}
		}else {
			if(lineB.point_A.x==lineB.point_B.x) {
				double k1=(lineA.point_A.y-lineA.point_B.y)/(lineA.point_A.x-lineA.point_B.x);
				double b1=lineA.point_A.y-k1*lineA.point_A.x;
				point.x=lineB.point_A.x;
				point.y=k1*point.x+b1;
				return point;
			}else {
				double k1=(lineA.point_A.y-lineA.point_B.y)/(lineA.point_A.x-lineA.point_B.x);
				double b1=lineA.point_A.y-k1*lineA.point_A.x;
				double k2=(lineB.point_A.y-lineB.point_B.y)/(lineB.point_A.x-lineB.point_B.x);
				double b2=lineB.point_A.y-k2*lineB.point_A.x;
				if(k1==k2&&b1==b2||k1==k2&&k1==0) {
					point.x=-1;
					point.y=-1;
					return point;
				}
				double x=(b2-b1)/(k1-k2);
				double y=k1*x+b1;
				point.x=x;
				point.y=y;
				return point;
			}
		}
        
    }





































































































































































    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Point A = new Point();
        A.x = scanner.nextDouble();
        A.y = scanner.nextDouble();
        Point B = new Point();
        B.x = scanner.nextDouble();
        B.y = scanner.nextDouble();
        Point C = new Point();
        C.x = scanner.nextDouble();
        C.y = scanner.nextDouble();
        Point D = new Point();
        D.x = scanner.nextDouble();
        D.y = scanner.nextDouble();
        Line AB = new Line(A, B);
        Line CD = new Line(C, D);
        Point ans = findMeetingPoint(AB, CD);
        System.out.println(ans.x + " " + ans.y);
        scanner.close();
    }
}