【Java期末复习】《面向对象程序设计》练习库

news2024/12/23 10:19:22

目录

一、单选题

二、填空题

三、程序填空题

1、 super使用--有如下父类和子类的定义,根据要求填写代码

2、简单加法计算器的实现

3、House类 

4、矩形类

5、创建一个Box类,求其体积

四、函数题

6-1 求圆面积自定义异常类

6-2 判断一个数列是否已排好序

6-3 设计一个矩形类Rectangle

6-4 Person类

6-5 是否偶数

6-6 Java类实现-正方形

6-7 学生类

6-8 数组求和

6-9 Rectangle类

五、编程题

7-1 设计一个矩形类Rectangle

7-2 重复数据问题

7-3 矩阵相加

7-4 身体质量指数(BMI)测算

7-5 闰年判断


一、单选题

1、下面的方法,当输入为2的时候返回值是多少?(   D  )

public int getValue(int i) {
         int result = 0;
         switch (i) {
            case 1:
                result = result + i;
            case 2:
                result = result + i * 2;
            case 3:
                result = result + i * 3;
        }
        return result;
 }

A.0

B.2

C.4

D.10

没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止,其中i一直为2

2、在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为(  C )。


A.隐藏
B.覆盖
C.重载
D.Java不支持此特性

3、关于抽象类,下面叙述错误的是( C ) 。


A.包含抽象方法的类必须是抽象类


B.抽象方法只需要声明,不需要实现


C.抽象类可以实例化


D.抽象类中可以没有抽象方法

4、以下哪个方法用于定义线程的执行体? ( C  )


A.start()


B.init()


C.run()


D.ynchronized()

5、关于集合对象的元素遍历描述错误的是  D


A.通过集合对象可获取迭代器对象


B.通过迭代器对象的hasNext()方法判断是否还有下一个元素


C.通过迭代器对象的next()方法获取元素,并移动到下一个位置


D.通过迭代器对象可向集合中添加元素

6、 运行类C的输出是( D )。

class A {
  public A() {
    System.out.println("The default constructor of A is invoked");
  }
}

class B extends A {
  public B() {
    System.out.println("The default constructor of B is invoked");
  }
}

public class C  {
  public static void main(String[] args) {
    B b = new B();
  }
}

A.没有输出。


B.输出 "The default constructor of B is invoked"


C.输出"The default constructor of B is invoked",然后是"The default constructor of A is invoked"


D.输出"The default constructor of A is invoked",然后是"The default constructor of B is invoked"

7、 JFrame的缺省布局管理器是( C )。


A.FlowLayout


B.CardLayout


C.BorderLayout


D.GridLayout

8、 下面程序的输出结果为:( A )。

class A {
 double f(double x, double y) {
  return x * y;
 }
}

class B extends A {
 double f(double x, double y) {
  return x + y;
 }
}

public class Test {
 public static void main(String args[]) {
  A obj = new B();
  System.out.println(obj.f(4, 6));
 }
}

A.10.0        成员方法的重写——子类让父类的成员方法不复存在


B.24.0


C.2.0


D.11.0

9、 以下关于继承的叙述正确的是( A )。

A.在Java中类只允许单一继承

B.在Java中,一个类只能实现一个接口

C.在Java中,一个类不能同时继承一个类和实现一个接口

D.在Java中,接口也具有单继承性

10、 以下声明合法的是( B )


A.abstract double d;    不可访问数据成员的修饰词为static和final


B.public abstract void w( );


C.default String s;     可访问数据成员的修饰词为protected public private 缺省

缺省也就是前面什么都不用修饰,就是String s


D.abstract final double method( ){ }      abstract和final不能并列修饰

11、关于下面的类,哪句是最正确的?        B

class A {
  private int i;
  protected int j;
}

class B extends A {
  private int k;
  protected int m;
}

A.B的对象包含数据域 i, j, k, m。


B.B的对象包含数据域 j, k, m。


C.B的对象包含数据域 j, m。


D.B的对象包含数据域k, m。

12、 在Java中用什么关键字修饰的方法可以直接通过类名来调用?(   A  )


A.static


B.final


C.private


D.void

二、填空题

1、在实现多线程的程序时有两种方式,一是通过继承(Thread )类,二是通过实现(Runable )接口。

 2、使用Iterator遍历集合时,可以调用hasNext()方法判断是否存在下一个元素,若存在下一个元素,则调用next()方法取出该元素

3、 在Java GUI编程中,javax.swing包中JTextField是对单行文本进行编辑的组件。

4、 如果一个Java程序实现了监听接口ActionListener,则该程序的必须导入包java.util.event;

三、程序填空题

1、 super使用--有如下父类和子类的定义,根据要求填写代码

class Father {
     int a;
     public Father(int a) 
     {
        this.a=a;
     }
     public void print() 
     {
        System.out.println(a);
     }
}
 
class Child extends Father {
     int a;
     public Child(int a) 
     {
         super(a);      // 将形参a的数值赋给父类成员变量a 
         this.a=a*10;   // 将父类成员变量a的值*10赋给本类的成员变量a
     }
     public void print()
     {
          System.out.println(super.a);    // 输出父类成员变量a的值
          System.out.println(this.a);      // 输出子类成员变量a的值
     }
}
 
public class Main {
    public static void main(String[] args) 
    {
        Child child=new Child(10);
        child.print();
    }
}

2、简单加法计算器的实现

public class Main extends JApplet implements ActionListener {
Container cp=getContentPane();
 
JButton JButton1=new JButton("确定");//创建JButton1,并初始化
 
JLabel JLabel1=new JLabel("+");
JLabel JLabel2=new JLabel("=");
JTextField JTextField1=new JTextField(10);
JTextField JTextField2=new JTextField(10);
JTextField JTextField3=new JTextField(10);
public void init()
{cp.setLayout(new FlowLayout());
    cp.add(JTextField1);    cp.add(JLabel1);
    cp.add(JTextField2);    cp.add(JLabel2);
    cp.add(JTextField3);    cp.add(JButton1);
 
JButton1.addActionListener(this);//为JButton1增加监听
 
}
public void actionPerformed(ActionEvent e) {
    if(e.getSource()==JButton1)//用getSource()方法获取事件源
    {
   double sum=Double.valueOf(JTextField1.getText())+Double.valueOf(JTextField2.getText());//获取两个操作数,并转化为double型
   JTextField3.setText(String.valueOf(sum)); 
}}}

3、House类 

  • 构造一个House类表示住宅 , 该类实现了Comparable接口。
  • 该类有一个私有的String类型成员变量address,两个私有的double型成员变量area和pirce;
  • 该类有一个带一个String型参数和两个double型参数的构造方法,用参数的值初始化house对象。
  • 为address、area和price添加getter()和setter()方法。注意,住宅的面积和价格必须大于0,如果setArea(double area)方法的参数小于等于0时,抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"住宅的面积必须大于0";如果setPrice(double price)方法的参数小于等于0时,抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"住宅的价格必须大于0"。
  • 该类有一个公共的方法int compareTo(House house),比较的依据是住宅的单位均价(价格除以面积)。如果当前对象的单位均价大于参数的单位均价,返回1;当前对象的单位均价小于参数的单位均价,返回-1;否则返回0。
  • 该类有一个公共方法toString(),根据住宅的数据生成并返回一个字符串(具体要求看输出样例)。
  • 构造一个Main ,执行一个for循环,共循环10次。每次循环从键盘读入数据创建两个House对象,比较并输出其中较大的对象;如果捕捉到异常,则输出异常信息。
import java.util.Scanner;

class House implements Comparable<House>
{
  private String address;
  private double area;
  private double price;

  public House(String address,double area,double price) 
  {
    setAddress(address);
    setArea(area);
    setPrice(price);
  }

  public String getAddress() 
  {
      return address;
  }

  public void setAddress(String address) 
  {
       this.address=address;
  }

  public double getArea() 
  {
        return area;
  }

  public void setArea(double area) 
  {
    if(area>0) this.area = area;
    else throw new IllegalArgumentException("住宅的面积必须大于0");

  }

  public double getPrice() 
  {
    return price;
  }

  public void setPrice(double price) 
  {
    if(price>0) this.price = price;
    else throw new IllegalArgumentException("住宅的价格必须大于0");
  }

  public int compareTo(House o) 
  {
    if (price/area>o.price/o.area) return 1;
    else if (price/area<o.price/o.area) return -1;
    else return 0;
  }

  @Override
  public String toString() {
    return "House{" + "address=" + address + ", area=" + area + ", price=" + price + '}';
  }
}

public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    for(int i=0; i<10; i++) {
    try
     {
        House house1 = new House(input.next(), input.nextDouble(), input.nextDouble());
        House house2 = new House(input.next(), input.nextDouble(), input.nextDouble());
        House maxHouse;

        if (house1.compareTo(house2)>= 0)
          maxHouse = house1;
        else
          maxHouse=house2;

        System.out.println("The max of " + house1 + " and " + house2 + " is " +maxHouse);
      } catch (IllegalArgumentException e1) {
        System.out.println(e1.getMessage());
        input.nextLine();
      } catch (Exception e2) {
        System.out.println(e2.getMessage());
        input.nextLine();
      }
    }
  }
}

4、矩形类

  • 构造一个Rectangle类表示矩形 , 该类实现了Comparable接口。
  • 该类有两个私有的double型成员变量width和height,表示矩形的宽度和高度;
  • 该类有一个带一个无参的构造方法,把宽带和高度都初始化为0;
  • 该类有一个带两个double型参数的构造方法,用参数的值初始化矩形的宽度和高度。
  • 为width和height添加getter()和setter()方法。注意,宽度和高度必须大于等于0,如果setWidth(double width)方法的参数小于0时,抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"矩形的宽度必须大于等于0";setHeight(double height)方法的参数小于0时,抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"矩形的高度必须大于等于0"。
  • getArea()方法,返回矩形的面积;
  • getgetPerimeter()方法,返回矩形的周长;
  • 该类有一个公共的方法int compareTo(Rectangle rectangle),比较当前对象和参数。如果当前对象的面积大于参数的面积,返回1;当前对象的面积小于参数的面积,返回-1;否则返回0。
  • 该类有一个公共方法toString(),根据矩形的宽度和高度生成并返回一个字符串(具体要求看输出样例)。
  • 构造一个Main ,执行一个for循环,共循环6次。每次循环从键盘读入数据创建两个矩形对象,比较并输出其中较大的对象的面积;如果捕捉到异常,则输出异常信息。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        for(int i=0; i<6; i++) {
            try
            {
                Rectangle rectangle1 = new Rectangle(input.nextDouble(),input.nextDouble());
                Rectangle rectangle2 = new Rectangle(input.nextDouble(),input.nextDouble());
                
                Rectangle maxRectangle;

                if (rectangle1.compareTo(rectangle2)>= 0)
                    maxRectangle=rectangle1;
                else
                    maxRectangle=rectangle2;

                System.out.println("The max area of " + rectangle1 + " and " + rectangle2 + " is " + maxRectangle.getArea());
            } 
catch(IllegalArgumentException e1) {
                System.out.println(e1.getMessage());
                input.nextLine();
            } catch (Exception e2) {
                System.out.println(e2.getMessage());
                input.nextLine();
            }
        }
    }
}

class Rectangle implements Comparable<Rectangle>
 {
    private double width;
    private double height;

    public Rectangle() {
          width=0;
          height=0;
    }

    public Rectangle(double width, double height) {
        setWidth(width);
        getHeight(height);
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        if(width>=0)
            this.width = width;
        else
            throw new IllegalArgumentException("矩形的宽度必须大于等于0");
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        if(height>=0)            
            this.height = height;
        else
            throw new IllegalArgumentException("矩形的高度必须大于等于0");
    }

    public double getArea() {
        return width*height;
    }

    public double getPerimeter() {    
        return 2*(width+height);
    }

    public int compareTo(Rectangle rectangle) {
        if (getArea()>rectangle.getArea())
            return 1;
        else if (getArea()<rectangle.getArea())
            return -1;
        else
            return 0;
    }

    public String toString() {
        return "Rectangle(width:"+width+",height:"+height+")";
    }
}

5、创建一个Box类,求其体积

  • 设计并实现Box类,它包含盒子的高度、宽带和深度的实例数据:还包含布尔变量full这个实例数据,变量full表示盒子是否满了。所有数据都定义为私有。定义Box构造函数接收并初始化盒子的高度、宽带和深度。每次新创建的Box都为空,构造函数将full初始化为假。该类所有实例都有getter和setter方法;该类还包含了一个计算盒子体积的方法。
  • 该类包含一个toString方法,用来返回一行关于盒子的描述。
  • 例如,输入的长、宽、高分别为4,如果盒子为空,则输出:
  • Box is empty, The Volumn is 64
  • 若将盒子的宽度修改为5,盒子设置为满,则输出:
  • Box is full, The Volumn is 80
  • 创建一个测试类BoxTest,其main方法输入盒子的长、宽、高,实例化一个Box对象,并输出盒子的描述。
  • 根据以下的测试类,在空格出填入Box类的设计程序。
import java.util.Scanner;

class Box
 {
    private boolean full;
    private int width;
    private int height;
    private int lenght;

    public Box(int width,int heigth,int length) {
        full = false;
        this.width = width;
        this.height = height;
        this.lenght = lenght;
    }

    public boolean isFull() {
        return full;
    }

    public void setFull(boolean full) {
        this.full = full;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int h) {
        this.height = height;
    }

    public int getLenght() {
        return lenght;
    }

    public void setLenght(int lenght) {
            this.lenght = lenght;
    }

    public int getVolumn() {
       return width*height*length;
    }

    @Override
    public String toString()
     {
        return "Box is " + (full ? "full" : "empty") + ", The Volumn is " + getVolumn();
     }
}

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int w = input.nextInt();
        int h = input.nextInt();
        int l = input.nextInt();
        Box box1 = new Box(w,h,l);
        System.out.println(box1.toString());
        box1.setWidth(5);
        box1.setFull(true);
        System.out.println(box1.toString());

    }
}

四、函数题

6-1 求圆面积自定义异常类

计算圆的面积,其中PI取3.14,圆半径为负数时应抛出异常,输出相应提示。

根据提供的主类信息,编写Circle类和CircleException类,以及在相关方法中抛出异常。

在这里给出主类
import java.util.*;
public class Main {

 public static void main(String[] args) {
        double s=0;
        Scanner sc=new Scanner(System.in);
        double r1,r2;
        r1=sc.nextDouble();
        r2=sc.nextDouble();
        Circle c1=new Circle(r1);
        Circle c2=new Circle(r2);
        try{
        s = c1.area();
        System.out.println(s);
        s = c2.area();
        System.out.println(s);
        }
        catch (CircleException e){
            e.print();
        }
   }
}


/* 请在这里填写答案 编写Circle 和CircleException类*/
3.5 -3.5

38.465
圆半径为-3.5不合理
class Circle
{
    double r;
    public Circle(double r)
    {
        this.r=r;
    }
    
    double area() throws CircleException
    {
        if(this.r>=0) return 3.14*r*r;
        else throw new CircleException(this.r);
    }
}

class CircleException extends Exception
{
    double r;
    
    public CircleException(double r)
    {
        this.r=r;
    }
    void print()
    {
        System.out.print("圆半径为"+this.r+"不合理");
    }
}

6-2 判断一个数列是否已排好序

编写如下所示的一个方法,判断一个数列是否已排序,如果已按升序排列则返回true。

public static boolean isSorted(int[] list)

主测试程序输入一组数据,然后输出该数列是否已排序或未排好序。

注意:输入的第一个数为该数列的元素个数。

public static boolean isSorted(int[] list)
{
    int n=list[0];
    boolean f=true;
    //for(int i=1;i<=n;i++) System.out.print(list[i]+" ");
    for(int i=2;i<=n;i++) 
        if(list[i]<list[i-1]) return false;
    return true;
}

6-3 设计一个矩形类Rectangle

设计一个名为Rectangle的类表示矩形。这个类包括:
两个名为width和height的double型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1.
一个无参构造方法。
一个为width和height指定值的矩形构造方法。
一个名为getArea()的方法返回这个矩形的面积。
一个名为getPerimeter()的方法返回这个矩形的周长。

import java.util.Scanner;
/* 你的代码将被嵌入到这里 */

public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    double w = input.nextDouble();
    double h = input.nextDouble();
    Rectangle myRectangle = new Rectangle(w, h);
    System.out.println(myRectangle.getArea());
    System.out.println(myRectangle.getPerimeter());

    input.close();
  }
}
3.14  2.78

8.7292
11.84
class Rectangle
{
    double width;
    double height;
    
    public Rectangle()
    {
        width=1;
        height=1;
    }
    
    public Rectangle(double width,double height)
    {
        this.width=width;
        this.height=height;
    }
    
    public double getArea()
    {
        return height*width;
    }
    
    public double getPerimeter()
    {
        return (width+height)*2;
    }
}

6-4 Person类

构造Person类。包括姓名(name),性别(sex)和年龄(age)。提供所有属性的set和get函数,提供print函数打印其信息

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         String name = scan.next();      
         String sex = scan.next();      
         int age = scan.nextInt();
         Person p = new Person();
         p.setName(name);
         p.setSex(sex);
         p.setAge(age);
         p.print();
         scan.close(); 
    }
}

/* 你的代码被嵌在这里 */
Lucy male 23

name:Lucy; sex:male; age:23
class Person
{
    String name;
    String sex;
    int age;
    
    public void setName(String name)
    {
        this.name=name;
    }
    
    public void setSex(String sex)
    {
        this.sex=sex;
    }
    
    public void setAge(int age)
    {
        this.age=age;
    }
    
    public void print()
    {
        System.out.print("name:"+name+"; sex:"+sex+"; age:"+age);
    }
}

6-5 是否偶数

public static boolean isOdd(int data)
{
    return data%2==0;
}

6-6 Java类实现-正方形

构造一个Square类,该类有一个私有double变量side存放边长,可以通过getter/setter方法进行访问。
该类具有getArea和getLength两个方法,能够利用边长计算正方形的面积和周长。

import java.util.Scanner;
public class Main {
 
  public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNextFloat()){
            double s=scanner.nextDouble();
            Square c = new Square(s);
            System.out.printf("%.2f %.2f\n",c.getArea(),c.getLength());
            c.setSide(c.getSide()*2);
            System.out.printf("%.2f %.2f\n",c.getArea(),c.getLength());           
        }
    } 
} 

/* 请在这里填写答案 */
1
2
3

以输入的浮点数作为边长创建正方型对象,输出正方型的面积和周长;将正方形的边长修改为原边长的2倍,输出修改后正方形的面积和周长。

1.00 4.00
4.00 8.00
4.00 8.00
16.00 16.00
9.00 12.00
36.00 24.00
class Square
{
    private double s;
    
    public Square(double s)
    {
        this.s=s;
    }
    
    public double getSide()
    {
        return s;
    }
    
    public double getArea()
    {
        return s*s;
    }
    public double getLength()
    {
        return s*4;
    }
    public void setSide(double s)
    {
        this.s=s;
    }
}

6-7 学生类

设计一个名为StudentOf2019EE的类,表示2019电子信息工程专业的学生。类包含:

  • String类型私有成员变量name,表示学生的姓名。
  • int型私有成员变量money,表示学生可支配的金额(不能为负数)。
  • int型私有静态(类)变量numberOfObjects,表示StudentOf2019EE对象的数量,初始值为0;每创建一个StudentOf2019EE对象,numberOfObjects应当加1。
  • int型私有静态(类)变量clazzMoney,表示全体学生缴纳的班费余额,初始值为0。
  • 构造方法StudentOf2019EE(String name),参数name用于初始化学生的姓名,可支配金额设为默认值100。
  • 构造方法StudentOf2019EE(String name, int mongey),参数name用于初始化学生的姓名,参数money用于初始化学生的可支配金额。
  • 为name和money添加getter和setter方法,都为公共方法。
  • 公共的实例方法void payClazzMoney(int amount),表示从学生的可支配金额中支出数量为amount的金额作为班费(如果学生的可支配金额<amount,则有多少交多少班费)。
  • 公共的静态方法void clazzActivity(int amount),表示班级活动,需要从班费余额支出数量为amount的金额作为活动经费(如果班费余额<amount,则有多少支出多少)。

创建三个StudentOf2019EE对象,三个对象分别支付一笔钱作为班费,最后组织一次班级活动。

import java.util.Scanner;

public class Main {
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.println("numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());

        StudentOf2019EE a = new StudentOf2019EE("Tom");
        StudentOf2019EE b = new StudentOf2019EE("Jerry", 200);
        StudentOf2019EE c = a;

        a.payClazzMoney(input.nextInt());
        System.out.println("numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());

        b.payClazzMoney(input.nextInt());
        System.out.println("numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());

        c.payClazzMoney(input.nextInt());
        System.out.println("numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());

        StudentOf2019EE.clazzActivity(input.nextInt());
        System.out.println("numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());
    }
}

/* 请在这里填写答案 */
50
300
100
400

numberOfObjects=0,clazzMoney=0
numberOfObjects=2,clazzMoney=50
numberOfObjects=2,clazzMoney=250
numberOfObjects=2,clazzMoney=300
numberOfObjects=2,clazzMoney=0
class StudentOf2019EE
{
    private String name;
    private int money;
    private static int numberOfObjects=0; //表示StudentOf2019EE对象的数量
    private static int clazzMoney=0; //全体学生缴纳的班费余额
    
    public StudentOf2019EE(String name)
    {
        this.name=name;
        money=100;
        numberOfObjects++;
    }
    
    public StudentOf2019EE(String name,int money)
    {
        this.name=name;
        this.money=money;
        numberOfObjects++;
    }
    
    public String getName()
    {
        return name;
    }
    
    public int getMoney()
    {
        return money;
    }
    
    public void payClazzMoney(int amount)
    {
        if(getMoney()>=amount)
        {
            clazzMoney+=amount;
            money-=amount;
        }else 
        {
            clazzMoney+=getMoney();
            money=0;
        }
    }
    
    public static void clazzActivity(int amount)
    {
        if(clazzMoney<amount) 
            clazzMoney-=clazzMoney;
        else clazzMoney-=amount;
    }
    
    public static int getNumberOfObjects()
    {
        return numberOfObjects;
    }
    
    public static int getClazzMoney()
    {
        return clazzMoney;
    }
}

6-8 数组求和

6-9 Rectangle类

构造一个Rectangle类表示矩形 , 该类实现了Comparable接口。

  • 该类有两个私有的double型成员变量width和height,表示矩形的宽度和高度;
  • 该类有一个带一个无参的构造方法,把宽带和高度都初始化为0;
  • 该类有一个带两个double型参数的构造方法,用参数的值初始化矩形的宽度和高度。
  • 为width和height添加getter()和setter()方法。注意,宽度和高度必须大于等于0,如果setWidth(double width)方法的参数小于0时,抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"矩形的宽度必须大于等于0";setHeight(double height)方法的参数小于0时,抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"矩形的高度必须大于等于0"。
  • getArea()方法,返回矩形的面积;
  • getgetPerimeter()方法,返回矩形的周长;
  • 该类有一个公共的方法int compareTo(Rectangle rectangle),比较当前对象和参数。如果当前对象的面积大于参数的面积,返回1;当前对象的面积小于参数的面积,返回-1;否则返回0。
  • 该类有一个公共方法toString(),根据矩形的宽度和高度生成并返回一个字符串(具体要求看输出样例)。

构造一个Main ,执行一个for循环,共循环6次。每次循环从键盘读入数据创建两个矩形对象,比较并输出其中较大的对象的面积;如果捕捉到异常,则输出异常信息。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        for(int i=0; i<6; i++) {
            try{
                Rectangle rectangle1 = new Rectangle(input.nextDouble(), input.nextDouble());
                Rectangle rectangle2 = new Rectangle(input.nextDouble(), input.nextDouble());
                Rectangle maxRectangle;
                if (rectangle1.compareTo(rectangle2)>= 0)
                    maxRectangle = rectangle1;
                else
                    maxRectangle = rectangle2;
                System.out.println("The max area of " + rectangle1 + " and " + rectangle2 + " is " + maxRectangle.getArea());
            } catch (IllegalArgumentException e1) {
                System.out.println(e1.getMessage());
                input.nextLine();
            } catch (Exception e2) {
                System.out.println(e2.getMessage());
                input.nextLine();
            }
        }
    }
}
/* 请在这里填写答案 */
-1 1 1 1
1 -1 1 1
1 1 -1 1
1 1 1 -1
3 4 2 5
3 4 2 7

矩形的宽度必须大于等于0
矩形的高度必须大于等于0
矩形的宽度必须大于等于0
矩形的高度必须大于等于0
The max area of Rectangle(width:3.0,height:4.0) and Rectangle(width:2.0,height:5.0) is 12.0
The max area of Rectangle(width:3.0,height:4.0) and Rectangle(width:2.0,height:7.0) is 14.0
class Rectangle implements Comparable<Rectangle>
{
    private double width;
    private double height;
    
    public Rectangle()
    {
        width=0;
        height=0;
    }
    
    public Rectangle(double width,double height)
    {
        setWidth(width);
        setHeight(height);
    }
    
    public void setWidth(double width)
    {
        if(width>=0) this.width=width;
        else throw new IllegalArgumentException("矩形的宽度必须大于等于0");
    }
    
    public void setHeight(double height)
    {
        if(height>=0) this.height=height;
        else throw new IllegalArgumentException("矩形的高度必须大于等于0");
    }
    
    public double getArea()
    {
        return height*width; 
    }
    
    public double getPerimeter()
    {
        return (height+width)*2;
    }
    
    public int compareTo(Rectangle o)
    {
        if(getArea()>o.getArea()) return 1;
        else if(getArea()==o.getArea()) return 0;
        else return -1;
    }
    
    public String toString()
    {
        return "Rectangle(width:"+width+",height:"+height+")";
    }
}

五、编程题

7-1 设计一个矩形类Rectangle

编写一个Java应用程序,该程序包含两个类,类的定义如下:

(1) 一个有关计算矩形面积的类Rectangle,定义如下成员:

  • ① 两个私有的成员变量:length(长,double类型)、width(宽,double类型);
  • ② 一个公有的无参数的构造方法,该构造方法将所有成员变量初始化为零;
  • ③ 一个公有的有参数的方法void setXY(double a, double b),该方法用于设置矩形的属性length与width;
  • ④ 一个公有的无参数的方法double getArea( ),该方法计算并返回矩形的面积;
  • ⑤一个公有的无参数的方法double getPerimeter( ),该方法计算并返回矩形的周长;

(2) 一个测试类Main,在main方法中声明1个Rectangle类的对象rect,通过setXY方法给rect的属性length和width进行赋值(从键盘输入),通过getArea方法来计算rect的面积,通过getPerimeter方法来计算rect的周长,然后输出其面积与周长。

import java.util.*;

class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        double l=sc.nextDouble(),w=sc.nextDouble();
        Rectangle rect=new Rectangle();
        rect.setXY(l,w);
        System.out.printf("面积为%.1f\n",rect.getArea());
        System.out.printf("周长为%.1f",rect.getPerimeter());
    }
}

class Rectangle
{
    private double l;
    private double w;
    
    public Rectangle()
    {
        l=0;
        w=0;
    }
    
    public void setXY(double a,double b)
    {
        l=a;
        w=b;
    }
    
    public double getArea()
    {
        return l*w;
    }
    
    public double getPerimeter()
    {
        return (l+w)*2;
    }
}

7-2 重复数据问题

import java.util.*;

class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
        String[] a=s.split(" ");
        Set<Integer> st=new HashSet<>();
        for(String x:a)
        {
            int t=Integer.parseInt(x);
            st.add(t);
        }
        if(st.size()==a.length) System.out.print("no");
        else System.out.print("yes");
    }
}

7-3 矩阵相加

import java.util.Scanner;

class Main
{
    public static Scanner scan=new Scanner(System.in);
    public static void main(String[] args)
    {
        
        int m=scan.nextInt(),n=scan.nextInt();
        int[][] a=new int[m][n];
        inputData(a);
        int[][] b=new int[m][n];
        inputData(b);
        int[][] c=new int[m][m];
        c=addMatrix(a,b);
        showResult(c);
    }

    public static void inputData(int[][] arr)
    {
        for(int i =0;i<arr.length;i++)
            for(int j=0;j<arr[i].length;j++)
                arr[i][j] =scan.nextInt();
    }

    public static int[][] addMatrix(int[][]arr1,int[][]arr2)
    {
        int [][] c = new int[arr1.length][arr1[0].length];
        for(int i =0;i<arr1.length;i++)
            for(int j =0;j<arr1[i].length;j++)
                c[i][j] = arr1[i][j] + arr2[i][j];
        return c;
    }

    public static void showResult(int[][] arr)
    {
        for(int i =0;i<arr.length;i++)
        {
            for(int j =0;j<arr[i].length;j++)
                System.out.print(" "+arr[i][j]);
            System.out.println();
        }
    }

}

7-4 身体质量指数(BMI)测算

import java.util.*;

class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        double w=sc.nextDouble(),h=sc.nextDouble();
        if(h<=0.0||h>2.72||w<=0.0||w>727) System.out.print("input out of range");
        else
        {
            double bmi=w/(h*h);
            if(bmi<18.5) System.out.print("thin");
            else if(bmi>=18.5&&bmi<24) System.out.print("fit");
            else if(bmi>=24&&bmi<28) System.out.print("overweight");
            else System.out.print("fat");
        }
    }
}

7-5 闰年判断

import java.util.*;

class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int year=sc.nextInt();
        if((year%4==0&&year%100!=0)||year%400==0) System.out.print("yes");
        else System.out.print("no");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于某业务单登陆场景并发测试实战

文章目录1 测试目的2 测试目标和测试对象3 名词解释4 测试说明5 测试环境和工具5.1 测试工具5.2 测试环境5.3 人力计划6 测试用例6.1 方案设计6.2 接口地址6.3 接口参数6.3.1 header参数6.3.2 请求参数7 脚本设计8 监控数据8.1 虚拟用户并发情况8.2 事务响应时间8.3 每秒点击次…

IP定位的具体网络应用

IP定位的原理是利用访问终端的注册信息和时延信息来估算现实中的地理位置&#xff0c;结合先进的定位算法服务&#xff0c;最高精确度能达到街道级&#xff0c;深受用户的喜爱。IP定位接口是一种通过IP地址来确定设备或用户位置的技术&#xff0c;主要应用于以下几个方面&#…

Windows平台上达梦数据库的ODBC安装与配置

文章目录概述安装包准备安装ODBC驱动配置ODBC数据源概述 最近很多公司都在响应信创&#xff0c;需要切换到国产数据库&#xff0c;然而很多数据库的一些基础组件的使用都没有一个很明确的官方文档。为了避免更多的人踩坑&#xff0c;本人将踩过的坑总结成博文&#xff0c;分享…

【正点原子FPGA连载】第十四章SD卡读写TXT文本实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十四章SD卡读写…

网络小白入门之路--锐捷RGOS日常管理

锐捷作为网络界的一名重要成员&#xff0c;其设备的管理系统RGOS也是我们要学习的重要一环&#xff0c;那么今天我们就一起看下锐捷RGOS的日常管理。 锐捷设备日常登录方式&#xff1a; 本地登陆&#xff1a; Console登陆&#xff1a;全新或配置清空的设备&#xff0c;需要使…

TeX文件和md文件的转换

1 tex文件转换为md文件 1.1 安装 pandoc 首先安装 pandoc 到你的电脑 pandoc 1.2 命令行 可以在vscode终端输出入以下命令&#xff0c;命令运行路径为tex文件所在 cd tex文件所属的目录 pandoc -s tex文件名.tex -o md的文件名.md1.3预览 发现最后md文件只有一部分转化成…

171、【动态规划】leetcode ——309. 最佳买卖股票时机含冷冻期 (C++版本)

题目描述 原题链接&#xff1a;309. 最佳买卖股票时机含冷冻期 解题思路 本次难点在于多了一个冷冻期&#xff0c;大体的状态过程是三个&#xff1a;持有股票、不持有股票、冷冻期。在不持有股票时候&#xff0c;又可分为之前就不持有股票并继续保持、今天才卖出股票明天是冷…

视频直播美颜sdk的发展史

视频直播美颜sdk的出现是必然的&#xff0c;它的诞生就是为了让更多用户能够更好地体验到视频直播带给大家的快乐&#xff0c;可以说视频直播美颜sdk的发展和用户体验有着紧密联系。今天&#xff0c;小编不聊技术&#xff0c;咱们来聊一下视频直播美颜sdk的诞生以及发展历程。 …

抽奖动画大转盘抽奖思路与做法

抽奖是各类营销活动中最常见的一种形式&#xff0c;本产品需求大致如下&#xff1a;转盘周围跑马灯交替闪烁&#xff0c;点击抽奖&#xff0c;大转盘旋转&#xff0c;调用接口获取抽奖结果&#xff0c;大转盘指针指向对应的奖品。高保如下图12.整体思路本需求要求跑马灯交替闪烁…

PHP Composer 下载依赖项时删除其它不相关文件 导致项目报错 依赖包vendor手动导入

场景 最近项目上需要开发图片文字识别功能&#xff0c;接入了开源的tesseract_ocr&#xff0c;根据官网介绍&#xff0c;使用composer require thiagoalessio/tesseract_ocr命令安装依赖&#xff0c;但是在执行之后&#xff0c;删除了一些文件&#xff0c;导致项目报错。 解…

数据管理之特征仓库

鉴于特征仓库热度下降&#xff0c;特将历史库存放出&#x1f604; 背景 数据工程师与算法工程师在数据存取上存在沟通成本&#xff0c;基于现状存在以下问题&#xff1a; 提供训练使用的离线特征与在线服务使用的在线特征&#xff0c;构造方式存在差异&#xff0c;离线、在线…

P18 PyTorch 感知机的梯度推导

前言这里面简单介绍一下单层感知机和多层感知机的模型参考&#xff1a;https://www.bilibili.com/video/BV17e4y1q7NG?p41一 单层感知机模型输入: k 代表网络层数&#xff0c;i 代表输入节点的编号前向传播: 权重系数k: 层数i: 前一层输入节点编号j: 当前层输出节点编号这里&a…

Python opencv进行圆形识别(圆检测)

圆形识别&#xff08;圆检测&#xff09;是图像识别中很常见的一种处理方式&#xff0c;最核心的是cv2.HoughCircles这个函数实现的圆形检测。当然还有一些其他的处理过程&#xff0c;以下详述&#xff1a; 1 读入图像 首先需要读取一个图像文件&#xff0c;将其作为一个变量…

Java 字符串

文章目录一、API二、String1. String 构造方法2. String 对象的特点3. 字符串的比较4. 用户登录案例5. 遍历字符串6. 统计字符次数7. 拼接字符串8. 字符串反转三、StringBuilder1. 构造方法2. 添加及反转方法3. 与 String 相互转换4. 拼接字符串升级版5. 字符串反转升级版一、A…

【Java】Spring核心与设计思想

文章目录Spring核心与设计思想1. Spring是什么1.1 什么是容器1.2 什么是IOC1.2.1 传统程序开发1.2.2 控制反转式程序开发1.2.3 对比总结规律1.3 理解Spring IOC1.4 DI概念说明Spring核心与设计思想 1. Spring是什么 我们通常所说的Spring指的是Spring Framework&#xff08;S…

工业4.0和工业物联网如何协同工作

虽然许多公司已经接受了工业物联网&#xff0c;但他们现在必须接受工业4.0对数据驱动的数字化转型的承诺。随着制造业、能源、公用事业和供应链应用迅速采用工业物联网(IIoT)&#xff0c;这些行业的新现实正在形成。工业物联网提供了企业管理数千个活动部件所需的数据类型&…

二、最基本的vuex的使用

二、最基本的vuex的使用&#xff1a; 学习任何技术&#xff0c;先找到没有用这个技术时&#xff0c;给我们带来了什么麻烦 而这个新技术是怎么帮我们解决这些问题的。 理解方式&#xff1a; state&#xff1a;装数据的一个对象 mutations&#xff1a;装方法的一个对象&#…

FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

目录1、前言2、目前主流的FPGA图像缩放方案3、本方案的优越性4、详细设计方案5、vivado工程详解6、上板调试验证并演示7、福利&#xff1a;工程源码获取1、前言 代码使用纯verilog实现&#xff0c;没有任何ip&#xff0c;可在Xilinx、Intel、国产FPGA间任意移植&#xff1b; 图…

steam搬砖信息差项目,新手1周拿到结果!

项目具体是什么呢&#xff1f; 项目简单概括通过选品软件自动分析出此商品国内外商品价格&#xff0c;计算出利润率&#xff0c;选择出有利润销量好的商品&#xff0c;在以最低价格上架到国内buff的平台里&#xff0c;既能快速的卖出&#xff0c;还能获利。 主要利润在于商品…

力扣刷题|216.组合总和 III、17.电话号码的字母组合

文章目录LeetCode 216.组合总和题目链接&#x1f517;思路LeetCode 17.电话号码的字母组合题目链接&#x1f517;思路LeetCode 216.组合总和 题目链接&#x1f517; LeetCode 216.组合总和 思路 本题就是在[1,2,3,4,5,6,7,8,9]这个集合中找到和为n的k个数的组合。 相对于7…