[java作业]Fan、求直线交点、Triangle2D、选课
public class Fan { public static void main(String[] args) { Fan fan1 = new Fan(), fan2 = new Fan(); fan1.modifySpeed(FAST); fan1.modifyRadius(10); fan1.modifyColor("yellow"); fan1.modifyOn(true); System.out.println(fan1.toString()); fan2.modifySpeed(MEDIUM); fan2.modifyRadius(5); fan2.modifyColor("blue"); fan2.modifyOn(false); System.out.println(fan2.toString()); } public Fan() { speed = SLOW; on = false; radius = 5; color = "blue"; } public int getSpeed() { return speed; } public boolean getOn() { return on; } public double getRadius() { return radius; } public String getColor() { return color; } public void modifySpeed(int speed) { this.speed = speed; } public void modifyOn(boolean on) { this.on = on; } public void modifyRadius(double radius) { this.radius = radius; } public void modifyColor(String color) { this.color = color; } public String toString() { if (on == true) return new String(speed + " " + color + " " + radius); else return new String("fan is off" + " " + color + " " + radius); } final static int SLOW = 1, MEDIUM = 2, FAST = 3; int speed = SLOW; boolean on = false; double radius = 5; String color = "blue"; }
import java.util.Scanner; public class Cross { static Line l1, l2; static Scanner input = new Scanner(System.in); public static void main(String[] args) { System.out.println("Enter the endpoints of the first line segment:"); l1 = new Line(); l2 = new Line(); l1.read(); System.out.println("Enter the endpoints of the second line segment:"); l2.read(); Point ans = getCrossPoint(l1, l2); System.out.println("The intersecting point is: " + ans.toString()); } public static Point getCrossPoint(Line l1, Line l2) { double a = l1.b.y - l1.a.y; double b = l1.a.x - l1.b.x; double p = l1.a.x * l1.b.y - l1.b.x * l1.a.y; double c = l2.b.y - l2.a.y; double d = l2.a.x - l2.b.x; double q = l2.a.x * l2.b.y - l2.b.x * l2.a.y; double u, v; if (Math.abs(b * c - a * d) > 1e-10) { v = (p * c - q * a) / (b * c - a * d); if (Math.abs(a) > 1e-10) u = (p - b * v) / a; else u = (q - d * v) / c; } else { u = (p * d - q * b) / (a * d - c * b); if (Math.abs(b) > 1e-10) v = (p - a * u) / b; else v = (q - c * u) / d; } return new Point(u, v); } public static class Point { public Point(double x, double y) { this.x = x; this.y = y; } public Point() { x = y = 0; } public void read() { x = input.nextDouble(); y = input.nextDouble(); } public String toString() { return new String("(" + x + ", " + y + ")"); } double x, y; } public static class Line { public Line(Point a, Point b) { this.a = a; this.b = b; } public Line() { a = new Point(); b = new Point(); } public void read() { a.read(); b.read(); } Point a, b; } }
public class Triangle2D { public static void main(String[] args) { Triangle2D t1 = new Triangle2D(new MyPoint(2.5, 2), new MyPoint(4.2, 3), new MyPoint(5, 3.5)); System.out.println("Area is: " + t1.getArea() + "\nPerimeter is: " + t1.getPerimeter()); System.out.println(t1.contains(new MyPoint(3, 3))); System.out.println(t1.contains(new Triangle2D(new MyPoint(2.9, 2), new MyPoint(4, 1), new MyPoint(1, 3.4)))); System.out.println(t1.overlaps(new Triangle2D(new MyPoint(2, 5.5), new MyPoint(4, -3), new MyPoint(2, 6.5)))); } public Triangle2D() { p1 = new MyPoint(); p2 = new MyPoint(1, 1); p3 = new MyPoint(2, 5); } public Triangle2D(MyPoint p1, MyPoint p2, MyPoint p3) { this.p1 = p1; this.p2 = p2; this.p3 = p3; } public double getArea() { double a = MyPoint.distance(p1, p2); double b = MyPoint.distance(p2, p3); double c = MyPoint.distance(p3, p1); double p = (a + b + c) / 2; return Math.sqrt(p * (p - a) * (p - b) * (p - c)); } public double getPerimeter() { double a = MyPoint.distance(p1, p2); double b = MyPoint.distance(p2, p3); double c = MyPoint.distance(p3, p1); return a + b + c; } public boolean contains(MyPoint p) { MyPoint pa = new MyPoint(p1.x - p.x, p1.y - p.y); MyPoint pb = new MyPoint(p2.x - p.x, p2.y - p.y); MyPoint pc = new MyPoint(p3.x - p.x, p3.y - p.y); double angle = getAngle(pa, pb) + getAngle(pb, pc) + getAngle(pc, pa); if (Math.abs(angle) > 1e-5) return true; return false; } public boolean contains(Triangle2D t) { return contains(t.p1) && contains(t.p2) && contains(t.p3); } //假定坐标系范围为[-10,10] public boolean overlaps(Triangle2D t) { if (contains(t) || t.contains(this)) return true; if (contains(t.p1) || contains(t.p2) || contains(t.p3)) return true; MyPoint P = new MyPoint(); for (int i = 0; i < 10000000; i ++) { P.x = Math.random() * 20 - 10; P.y = Math.random() * 20 - 10; if (contains(P) && t.contains(P)) return true; } return false; } public static double getAngle(MyPoint v1, MyPoint v2) { double ans = Math.acos(v1.mul(v2) / v1.abs() / v2.abs()); if (v1.x * v2.y - v1.y * v2.x < 0) return ans; else return -ans; } public void setP1(MyPoint p1) { this.p1 = p1; } public void setP2(MyPoint p2) { this.p2 = p2; } public void setP3(MyPoint p3) { this.p3 = p3; } public MyPoint getP1() { return p1; } public MyPoint getP2() { return p2; } public MyPoint getP3() { return p3; } public static class MyPoint { public MyPoint() { x = y = 0; } public MyPoint(double x, double y) { this.x = x; this.y = y; } public double getx() { return x; } public double gety() { return y; } public double mul(MyPoint that) { return x * that.x + y * that.y; } public double abs() { return Math.sqrt(x * x + y * y); } public static double distance(MyPoint A, MyPoint B) { double x = A.x - B.x, y = A.y - B.y; return Math.sqrt(x * x + y * y); } public static double distance(double x1, double y1, double x2, double y2) { double x = x1 - x2, y = y1 - y2; return Math.sqrt(x * x + y * y); } double x, y; } MyPoint p1, p2, p3; }
public class CourseSelection { public static void main(String[] args) { CourseSelection cs = new CourseSelection(); cs.addStudent("大神"); cs.addStudent("郑涛"); cs.addStudent("邓时庆"); cs.addCourse("大学语文"); cs.addCourse("理论物理"); cs.addCourse("宇宙的起源"); cs.selectCourse("大神", "宇宙的起源"); cs.selectCourse("大神", "理论物理"); cs.selectCourse("邓时庆", "大学语文"); cs.selectCourse("郑涛", "理论物理"); cs.selectCourse("邓时庆", "理论物理"); cs.selectCourse("郑涛", "大学语文"); cs.showStudents(); cs.showCourses(); System.out.println(); cs.dropCourse("郑涛", "理论物理"); cs.dropCourse("邓时庆", "大学语文"); cs.dropCourse("大神", "宇宙的起源"); cs.dropCourse("大神", "理论物理"); cs.selectCourse("大神", "大学语文"); cs.selectCourse("郑涛", "宇宙的起源"); cs.selectCourse("邓时庆", "宇宙的起源"); cs.showStudents(); cs.showCourses(); } public void showStudents() { System.out.println("--------------sutdents--------------"); for (int i = 0; i < numberOfStudents; i ++) { System.out.print(students[i].getStudentName() + ":"); for (int j = 0; j < students[i].numberOfCourses; j ++) { System.out.print("___" + students[i].getCourses()[j]); } System.out.println(); } } public void showCourses() { System.out.println("--------------courses--------------"); for (int i = 0; i < numberOfCourses; i ++) { System.out.print(courses[i].getCourseName() + ":"); for (int j = 0; j < courses[i].numberOfStudents; j ++) { System.out.print("___" + courses[i].getStudents()[j]); } System.out.println(); } } public void addStudent(String studentName) { students[numberOfStudents] = new Student(studentName); numberOfStudents ++; } public void addCourse(String courseName) { courses[numberOfCourses] = new Course(courseName); numberOfCourses ++; } public void selectCourse(String studentName, String courseName) { for (int i = 0; i < numberOfStudents; i ++) { if (students[i].studentName.equals(studentName)) { students[i].addCourse(courseName); } } for (int i = 0; i < numberOfCourses; i ++) { if (courses[i].courseName.equals(courseName)) { courses[i].addStudent(studentName); } } } public void dropCourse(String studentName, String courseName) { for (int i = 0; i < numberOfStudents; i ++) { if (students[i].studentName.equals(studentName)) { students[i].dropCourse(courseName); } } for (int i = 0; i < numberOfCourses; i ++) { if (courses[i].courseName.equals(courseName)) { courses[i].dropStudent(studentName); } } } public CourseSelection() { numberOfCourses = numberOfStudents = 0; } public static class Course { public Course() { numberOfStudents = 0; } public Course(String courseName) { this.courseName = courseName; } public String[] getStudents() { return students; } public int getNumberOfStudents() { return numberOfStudents; } public String getCourseName() { return courseName; } public void addStudent(String student) { students[numberOfStudents] = student; numberOfStudents ++; } public void dropStudent(String student) { for (int i = 0; i < numberOfStudents; i ++) { if (this.students[i].equals(student)) { for (int j = i + 1; j < numberOfStudents; j ++) { this.students[j - 1] = this.students[j]; } numberOfStudents --; i --; } } } public void clear() { numberOfStudents = 0; } String courseName; String[] students = new String[100]; int numberOfStudents; } public class Student { public Student() { numberOfCourses = 0; } public Student(String studentName) { this.studentName = studentName; } public void addCourse(String course) { courses[numberOfCourses] = course; numberOfCourses ++; } public void dropCourse(String course) { for (int i = 0; i < numberOfCourses; i ++) { if (this.courses[i].equals(course)) { for (int j = i + 1; j < numberOfCourses; j ++) { this.courses[j - 1] = this.courses[j]; } numberOfCourses --; i --; } } } public String[] getCourses() { return courses; } public int getNumberOfCourses() { return numberOfCourses; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } String studentName; String[] courses = new String[100]; int numberOfCourses; } Course[] courses = new Course[100]; Student[] students = new Student[100]; int numberOfCourses, numberOfStudents; }