zoukankan      html  css  js  c++  java
  • JAVA第二次平时作业

    作业2:

    作业要求:

    设计一个处理复数运算的类,该类中至少有两个成员方法:
    复数加法和复数减法运算。
    在上述类中添加两个静态方法:求一个复数的模和求一个复
    数的复角。
    设计一个子类,该子类继承了上述的类,并且至少拥有自己
    的两个方法:复数乘法和复数除法。
    再设计一个类,包含main方法,对上面的类进行应用与测试。
    该作业要求编程并调试通过。对你设计的类要有详细的文字
    说明(类所封装的内容,属性、方法的功能与含义等)

    代码:

    package homework2;
    
    //Calculate类
    public class Calculate extends Operation{
        
        public Calculate(){}
        
        //计算两复数相乘
        public Complex multiple(Complex complex1,Complex complex2){
            double ret_real = complex1.real*complex2.real - complex1.imaginary*complex2.imaginary;
            double ret_imaginary = complex1.real*complex2.imaginary + complex1.imaginary*complex2.real;
            Complex ret = new Complex(ret_real,ret_imaginary);
            return ret;
        }
        
        //计算两复数相除
        public Complex div(Complex complex1,Complex complex2) {
            double real = (complex1.real*complex2.real + complex1.imaginary*complex2.imaginary)
                    /(complex2.real*complex2.real + complex2.imaginary*complex2.imaginary);
            double imaginary = (complex1.imaginary*complex2.real - complex1.real*complex2.imaginary)
                    /(complex2.real*complex2.real + complex2.imaginary*complex2.imaginary);
            Complex ret = new Complex(real,imaginary);
            return ret;
        }
    }
     1 package homework2;
     2 
     3 //复数类
     4 public class Complex {
     5     //实部和虚部
     6     double real,imaginary;
     7     
     8     
     9     public Complex(){}
    10     //构造方法
    11     public Complex(double real,double imaginary){
    12         this.real = real;
    13         this.imaginary = imaginary;
    14     }
    15     
    16     //输出复数的实部和虚部
    17     public void print() {
    18         System.out.println(real + " " + imaginary);
    19     }
    20 }
     1 package homework2;
     2 
     3 import java.lang.Math;
     4 
     5 //处理复数运算的类
     6 public class Operation {
     7     
     8     public Operation(){}
     9     
    10     //复数加法
    11     public Complex add(Complex complex1,Complex complex2){
    12         Complex ret = new Complex(complex1.real + complex2.real,complex1.imaginary + complex2.imaginary);
    13         return ret;
    14     }
    15     
    16     //复数减法
    17     public Complex sub(Complex complex1,Complex complex2){
    18         Complex ret = new Complex(complex1.real - complex2.real,complex1.imaginary - complex2.imaginary);
    19         return ret; 
    20     }
    21     
    22     //求一个复数的模
    23     public static double abs(Complex complex){
    24         return Math.sqrt(complex.real*complex.real + complex.imaginary*complex.imaginary);
    25     }
    26     
    27     //求一个复数的辐角
    28     public static double arg(Complex complex){
    29         return Math.atan2(complex.imaginary,complex.real);
    30     }
    31     
    32 }
     1 package homework2;
     2 
     3 import java.util.Scanner;
     4 
     5 //Test类包含main方法,对其他三个类进行应用与测试
     6 public class Test {
     7     public static void main(String args[]) {
     8         Complex complex1 = new Complex();//复数1
     9         Complex complex2 = new Complex();//复数2
    10         
    11         //使用Scanner读入两复数
    12         Scanner reader = new Scanner(System.in);
    13         //读入第一个复数
    14         System.out.println("请输入第一个复数的实部和虚部:");
    15         complex1.real = reader.nextDouble();//读入实部
    16         complex1.imaginary = reader.nextDouble();//读入虚部
    17         //读入第二个复数
    18         System.out.println("请输入第二个复数的实部和虚部:");
    19         complex2.real = reader.nextDouble();//读入实部
    20         complex2.imaginary = reader.nextDouble();//读入虚部
    21         
    22         //停止输入
    23         reader.close();
    24         
    25         //创建operate对象
    26         Operation operate = new Operation();
    27         
    28         //通过operate实现两复数相加
    29         Complex addtion = operate.add(complex1, complex2);
    30         //输出相加后的结果
    31         System.out.println("两复数相加后实部和虚部分别为");
    32         addtion.print();
    33         
    34         //通过operate实现两复数相减
    35         Complex sub = operate.sub(complex1, complex2);
    36         //输出相减后的结果
    37         System.out.println("两复数相减后实部和虚部分别为");
    38         sub.print();
    39         
    40         //输出第一个复数的模长
    41         System.out.println("第一个复数的模长为:"+Operation.abs(complex1));
    42         //输出第一个复数的辐角
    43         System.out.println("第一个复数的辐角为:"+Operation.arg(complex1));
    44         
    45         //创建calculte对象
    46         Calculate calculate = new Calculate();
    47         
    48         //通过calculate实现两复数相乘
    49         Complex mul = calculate.multiple(complex1, complex2);
    50         //输出相乘后的结果
    51         System.out.println("两复数相乘后实部和虚部分别为");
    52         mul.print();
    53         
    54         //通过calculate实现两复数相除
    55         Complex div = calculate.div(complex1, complex2);
    56         //输出相除后的结果
    57         System.out.println("两复数相除后实部和虚部分别为");
    58         div.print();
    59     }
    60 }

    运行结果:

    作业3:

    作业要求:

    编写一个线段类 MyLine,要求如下:
    主要属性有: x ,y ;类型为Point (查看API)
    编写构造方法,如 MyLine(Point p1 , Point p2)
    编写5个成员方法。如:
    检查线段是否位于第一象限check()…
    求线段的长度 length() …
    判断两条直线是否相交(另一线段作为参数)。
    编写一点到该线段(或延长线)的距离
    其他方法。
    注:编写方法时,考虑利用Point类的方法
    编写测试程序
    该作业要求编程并调试通过。对你设计的类要有详细的文字
    说明(类所封装的内容,属性、方法的功能与含义等)

    代码:

      1 package homework3;
      2 
      3 import java.awt.Point;
      4 import java.math.*;
      5 import java.util.Scanner;
      6 
      7 class MyLine {
      8     Point x,y;
      9     
     10     public MyLine(){}//构造方法
     11     
     12     //构造方法
     13     public MyLine(Point p1,Point p2){
     14         x = p1;
     15         y = p2;
     16     }
     17     
     18     //检查线段是否位于第一象限
     19     public boolean check() {
     20         if (x.x > 0 && x.y > 0 && y.x > 0 && y.y > 0) return true;
     21         else return false;
     22     }
     23     
     24     //求线段的长度 
     25     public double length() {
     26         return Math.sqrt((x.y-x.x)*(x.y-x.x)+(y.y-y.x)*(y.y-y.x));
     27     }
     28     
     29     //判断两条线段是否相交
     30     public boolean intersection(MyLine bLine) {
     31            /*
     32                *快速排斥:
     33                *两个线段为对角线组成的矩形,如果这两个矩形没有重叠的部分,那么两条线段是不可能出现重叠的
     34             */
     35            if(!(Math.min(this.x.x,this.y.x)<=Math.max(bLine.x.x,bLine.y.x) &&
     36                 Math.min(bLine.x.y,bLine.y.y)<=Math.max(this.x.y,this.y.y)&&
     37                 Math.min(bLine.x.x,bLine.y.x)<=Math.max(this.x.x,this.y.x) && 
     38                 Math.min(this.x.y,this.y.y)<=Math.max(bLine.x.y,bLine.y.y)))
     39            return false;
     40            /*
     41             *跨立实验:
     42             *如果两条线段相交,那么必须跨立,就是以一条线段为标准,另一条线段的两端点一定在这条线段的两段
     43             *也就是说a b两点在线段cd的两端,c d两点在线段ab的两端
     44             */
     45            double u,v,w,z;//分别记录两个向量
     46            u=(bLine.x.x-this.x.x)*(this.y.y-this.x.y)-(this.y.x-this.x.x)*(bLine.x.y-this.x.y);
     47            v=(bLine.y.x-this.x.x)*(this.y.y-this.x.y)-(this.y.x-this.x.x)*(bLine.y.y-this.x.y);
     48            w=(this.x.x-bLine.x.x)*(bLine.y.y-bLine.x.y)-(bLine.y.x-bLine.x.x)*(this.x.y-bLine.x.y);
     49            z=(this.y.x-bLine.x.x)*(bLine.y.y-bLine.x.y)-(bLine.y.x-bLine.x.x)*(this.y.y-bLine.x.y);
     50            return (u*v<=0.00000001 && w*z<=0.00000001);
     51     }
     52     
     53     //一点到该线段(或延长线)的距离
     54     public double distancePointToMyLine(Point aPoint) {
     55         double A = x.y - y.y;
     56         double B = y.x - x.x;
     57         double C = x.x*y.y-x.y*y.x;
     58         double dis = (Math.abs(A*aPoint.x+B*aPoint.y+C)/Math.sqrt(A*A+B*B));
     59         return dis;
     60     }
     61     
     62     //判断点是否在线段所在直线上
     63     public boolean pointOnMyLine(Point aPoint) {
     64         return ((y.y-x.y)/(y.x-x.x) == (aPoint.y - x.y)/(aPoint.x-x.x));
     65     }
     66 }
     67 
     68 public class Test{
     69     public static void  main(String args[]) {
     70         
     71         Scanner reader = new Scanner(System.in);
     72         
     73         //输入第一条线段的左端点的横纵坐标
     74         Point ax = new Point();
     75         System.out.println("请输入第一条线段的左端点的横纵坐标");
     76         ax.x = reader.nextInt();
     77         ax.y = reader.nextInt();
     78         
     79         //第一条线段的右端点的横纵坐标
     80         Point ay = new Point();
     81         System.out.println("请输入第一条线段的右端点的横纵坐标");
     82         ay.x = reader.nextInt();
     83         ay.y = reader.nextInt();
     84         
     85         MyLine aLine = new MyLine(ax,ay);
     86         
     87         //输入第二条线段的左端点的横纵坐标
     88         Point bx = new Point();
     89         System.out.println("请输入第二条线段的左端点的横纵坐标");
     90         bx.x = reader.nextInt();
     91         bx.y = reader.nextInt();
     92         
     93         //输入第一条线段的右端点的横纵坐标
     94         Point by = new Point();
     95         System.out.println("请输入第一条线段的右端点的横纵坐标");
     96         by.x = reader.nextInt();
     97         by.y = reader.nextInt();
     98         
     99         MyLine bLine = new MyLine(bx,by);
    100         
    101         //检查线段是否位于第一象限
    102         if (aLine.check()){
    103             System.out.println("aLine在第一象限");
    104         }else System.out.println("aLine不在第一象限");
    105         
    106         //求线段的长度 
    107         System.out.println("aLine的长度是:"+aLine.length());
    108         
    109         //判断两条线段是否相交
    110         if (aLine.intersection(bLine)){
    111             System.out.println("aLine和bLine相交");
    112         }else System.out.println("aLine和bLine不相交");
    113         
    114         //输入一个点的坐标,然后求该点到aLine的距离
    115         Point point = new Point();
    116         System.out.println("请输入点的横纵坐标:");
    117         point.x = reader.nextInt();
    118         point.y = reader.nextInt();
    119         //一点到该线段(或延长线)的距离
    120         System.out.println("点到aLine的距离为:"+aLine.distancePointToMyLine(point));
    121         
    122         //判断点是否在线段所在直线上
    123         if(aLine.pointOnMyLine(point)){
    124             System.out.println("点在线段所在直线上");
    125         }else System.out.println("点不在线段所在直线上");
    126     }
    127 }

    运行结果:

    作业4:

    作业要求:

    编写一个book类:
    两个属性:
    String bname (书名) int price(定价)
    注:本题中假定书名唯一,可作为书的标识。
    一个构造方法: book(String p1,int p2)
    两个成员方法:
    String getName() 获取书名
    int getPrice() 获取价格


    编写一个BookCard类(借书卡)
    三个属性:
    int rno 读者号
    String rname 读者名
    book[] books 在借图书(最多10本)
    一个构造方法:
    BookCard(int p1,String p2,book[] p3)
    八个成员方法:
    int getRno() 取读者号
    String getRname() 取读者名
    int bnum() 统计在借图书数(已借了几本书)
    boolean borrow(book b)
    借书方法:参数为所借书之对象。返回值为true表示借书成功,
    返回值为false表示借书不成功(如已借10本)。
    boolean returnBook(String s)
    还书方法:参数为所还书名。返回值为true表示还书成功,返
    回值为false表示还书不成功(如没借此书)
    void printBooks()
    该方法输出在借书名清单,每行一个书名。
    int expensive(int p)
    该方法统计出在借图书中定价高于参数p的图书册数。
    String[] search(String s)
    本方法的参数是指定的一个关键词(如“计算机”)。本方法找出所有在借图书中书名包括该关键词的图书,并将找到的书以数组形式返回。
    提示:
    数组元素为空时其值表示为 null
    自己在主程序中编写测试用例,要用到BookCard类的8个方法,
    要测试方法的不同返回值。例:
    public static void main(String args[]){
    book b1 =new book("计算机文化基础",23);
    book b2 = new book("数据库与计算机管理",32);
    book b3 = new book(“Java面向对象程序设计",40);
    book[] books={b1,b2,b3};
    BookCard b = new BookCard (980001,"王山",books);
    b.printBooks() ;
    . . . . . .
    该作业要求编程并调试通过。对你设计的类要有详细的文字
    说明(类所封装的内容,属性、方法的功能与含义等)

    代码:

    package task4;
    
    //Book类
    public class Book {
        String bname;
        int price;
        
        Book(){}
        
        //构造方法
        Book(String bname,int price) {
            this.bname = bname;
            this.price = price;
        }
        
        //获得名字
        String getName() {
            return bname;
        }
        
        //获得价格
        int getPrice() {
            return price;
        }
    }
     1 package task4;
     2 
     3 public class BookCard {
     4     int rno;
     5     String rname;
     6     Book [] books = new Book [10];
     7     BookCard(int p1,String p2,Book[] p3){
     8         rno = p1;
     9         rname = p2;
    10         books = p3;
    11     }
    12 
    13     //取读者号
    14     int getRno(){
    15         return rno;
    16     }
    17     
    18     //取读者名
    19     String getRname(){
    20         return rname;
    21     }
    22     
    23     //统计在借图书数
    24     int bnum(){
    25         return books.length;
    26     }
    27     
    28     //借书
    29     boolean borrow(Book b){
    30         if (books.length == 10) return false;
    31         else {
    32             int len = books.length;
    33             books[len-1] = b;
    34             return true;
    35         }
    36     }
    37     
    38     //还书
    39     boolean returnBook(String s){
    40         for (int i = 0;i < books.length;++i){
    41             if (books[i] != null && books[i].bname == s){
    42                 int len = books.length;
    43                 books[i] = books[len-1]; 
    44                 books[len-1] = null;
    45                 return true;
    46             }
    47         }
    48         return false;
    49     }
    50     
    51     //输出在借书名清单
    52     void printBooks(){
    53         for(int i = 0;i < books.length;++i) {
    54             System.out.println(books[i].getName());
    55         }
    56     }
    57     
    58     //统计出在借图书中定价高于参数p的图书册数
    59     int  expensive(int p){
    60         int count = 0;
    61         for(int i = 0;i < books.length;++i) {
    62             if(books[i] != null && books[i].getPrice() > p) count++;
    63         }
    64         return count;
    65     }
    66     
    67     //找出所有在借图书中书名包括该关键词的图书
    68     String[] search(String s){
    69         String[] ret = new String[10];
    70         int cnt = 0;
    71         for(int i = 0;i < books.length;++i) {
    72             if(books[i] != null && books[i].getName().indexOf(s) != -1) ret[cnt++] = books[i].getName();
    73         }
    74         return ret;
    75     }
    76     
    77     
    78 }
     1 package task4;
     2 
     3 public class Test {
     4     public static void main(String args[]){
     5         Book b1 =new Book("离散数学及其应用",23);
     6         Book b2 = new Book("大学计算机基础",32);
     7         Book b3 = new Book("Java面向对象程序设计",40);
     8         Book b4 = new Book("C++程序设计", 65);
     9         Book b5 = new Book("大学英语", 12);
    10         Book[] books={b1,b2,b3,b4,b4,b5,b5,b4,b5};
    11         BookCard b = new BookCard (216132,"xxx",books);
    12         
    13         System.out.println("读者号:" + b.getRno() + " 读者名:" + b.getRname() + " 在借图书数目:" + b.bnum());
    14         //输出已经借了的图书
    15         System.out.println("在借图书有:");
    16         b.printBooks();
    17         
    18         //借书测试
    19         if (b.borrow(b5)){
    20             System.out.println(b5.bname+"借书成功!");
    21         }else System.out.println(b5.bname+"借书失败!");
    22         
    23         //借书测试
    24         if (b.borrow(b5)){
    25             System.out.println(b5.bname+"借书成功!");
    26         }else System.out.println(b5.bname+"借书失败!");
    27         
    28         //还书测试
    29         if(b.returnBook("离散数学及其应用")) {
    30             System.out.println("离散数学及其应用还书成功!");
    31         }else System.out.println("离散数学及其应用还书失败!");
    32         
    33         //还书测试
    34         if(b.returnBook("离散数学及其应用")) {
    35             System.out.println("离散数学及其应用还书成功!");
    36         }else System.out.println("离散数学及其应用还书失败!");
    37         
    38         
    39         //寻找定价高于33的书
    40         System.out.println("定价高于33的书有:" + b.expensive(33) + "本");
    41         
    42         //寻找书名中含C的书
    43         System.out.println("书名内包含C的书有:");
    44         String[] cout = b.search("C");
    45         for(int i = 0;cout[i] != null;++i) {
    46             System.out.println(cout[i]);
    47         }
    48         
    49     }
    50 }

    运行结果:

  • 相关阅读:
    Python selenium —— 一定要会用selenium的等待,三种等待方式解读
    python3 selenium 切换窗口的几种方法
    转:对UI自动化测试的一些感悟
    Docker
    【转】selenium之 定位以及切换frame
    selenium——键盘操作
    selenium——鼠标事件
    python 读取Excel表格方法
    springboot maven 更新jar包速度慢的问题
    Python3 读写utf-8文本文件
  • 原文地址:https://www.cnblogs.com/mizersy/p/10347765.html
Copyright © 2011-2022 走看看