• [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() + "
    Perimeter 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;
    }
    

      

  • 相关阅读:
    一道简单的数组遍历题,加上四个条件后感觉无从下手
    五分钟小知识:如何用算法高效寻找素数?
    如何高效对有序数组/链表去重?
    中级控件——文本输入——文本变化监听器
    中级控件——对话框——提醒对话框AlertDialog
    数据存储——四种存储方式——存储卡的文件操作——私有存储空间与公共存储空间
    中级控件——文本输入——焦点变更监听器
    中级控件——对话框——日期对话框DatePickerDialog
    中级控件——对话框——时间对话框TimePickerDialog
    数据存储——四种存储方式——共享参数SharedPreferences——保存路径是:/data/data/应用包名/shared_prefs/文件名.xml——实现密码登录功能——此章节是前面的内容整合
  • 原文地址:https://www.cnblogs.com/jklongint/p/4925969.html
Copyright © 2020-2023  润新知