小言_互联网的博客

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

543人阅读  评论(0)

目录

一、单选题

二、填空题

三、程序填空题

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  )


   
  1. public  int  getValue (int i) {
  2.           int  result  =  0;
  3.           switch (i) {
  4.              case  1:
  5.                 result = result + i;
  6.              case  2:
  7.                 result = result + i * 2;
  8.              case  3:
  9.                 result = result + i *  3;
  10.         }
  11.          return result;
  12.  }

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 )。


   
  1. class A {
  2.   public A () {
  3.     System.out.println( "The default constructor of A is invoked");
  4.   }
  5. }
  6. class B extends A {
  7.   public B () {
  8.     System.out.println( "The default constructor of B is invoked");
  9.   }
  10. }
  11. public class C  {
  12.   public static void main (String[] args) {
  13.     B b = new B();
  14.   }
  15. }

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 )。


   
  1. class A {
  2.   double f (double x, double y) {
  3.   return x * y;
  4.  }
  5. }
  6. class B extends A {
  7.   double f (double x, double y) {
  8.   return x + y;
  9.  }
  10. }
  11. public class Test {
  12.   public static void main (String args[]) {
  13.   A obj = new B();
  14.   System.out.println(obj.f( 4, 6));
  15.  }
  16. }

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


   
  1. class A {
  2. private int i;
  3. protected int j;
  4. }
  5. class B extends A {
  6. private int k;
  7. protected int m;
  8. }

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使用--有如下父类和子类的定义,根据要求填写代码


  
  1. class Father {
  2. int a;
  3. public Father (int a)
  4. {
  5. this.a=a;
  6. }
  7. public void print ()
  8. {
  9. System.out.println(a);
  10. }
  11. }
  12. class Child extends Father {
  13. int a;
  14. public Child (int a)
  15. {
  16. super(a); // 将形参a的数值赋给父类成员变量a
  17. this.a=a* 10; // 将父类成员变量a的值*10赋给本类的成员变量a
  18. }
  19. public void print ()
  20. {
  21. System.out.println( super.a); // 输出父类成员变量a的值
  22. System.out.println( this.a); // 输出子类成员变量a的值
  23. }
  24. }
  25. public class Main {
  26. public static void main (String[] args)
  27. {
  28. Child child= new Child( 10);
  29. child.print();
  30. }
  31. }

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


  
  1. public class Main extends JApplet implements ActionListener {
  2. Container cp=getContentPane();
  3. JButton JButton1= new JButton( "确定"); //创建JButton1,并初始化
  4. JLabel JLabel1= new JLabel( "+");
  5. JLabel JLabel2= new JLabel( "=");
  6. JTextField JTextField1= new JTextField( 10);
  7. JTextField JTextField2= new JTextField( 10);
  8. JTextField JTextField3= new JTextField( 10);
  9. public void init ()
  10. {cp.setLayout( new FlowLayout());
  11. cp.add(JTextField1); cp.add(JLabel1);
  12. cp.add(JTextField2); cp.add(JLabel2);
  13. cp.add(JTextField3); cp.add(JButton1);
  14. JButton1.addActionListener( this); //为JButton1增加监听
  15. }
  16. public void actionPerformed (ActionEvent e) {
  17. if(e.getSource()==JButton1) //用getSource()方法获取事件源
  18. {
  19. double sum=Double.valueOf(JTextField1.getText())+Double.valueOf(JTextField2.getText()); //获取两个操作数,并转化为double型
  20. JTextField3.setText(String.valueOf(sum));
  21. }}}

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对象,比较并输出其中较大的对象;如果捕捉到异常,则输出异常信息。

  
  1. import java.util.Scanner;
  2. class House implements Comparable<House>
  3. {
  4. private String address;
  5. private double area;
  6. private double price;
  7. public House (String address,double area,double price)
  8. {
  9. setAddress(address);
  10. setArea(area);
  11. setPrice(price);
  12. }
  13. public String getAddress ()
  14. {
  15. return address;
  16. }
  17. public void setAddress (String address)
  18. {
  19. this.address=address;
  20. }
  21. public double getArea ()
  22. {
  23. return area;
  24. }
  25. public void setArea (double area)
  26. {
  27. if(area> 0) this.area = area;
  28. else throw new IllegalArgumentException( "住宅的面积必须大于0");
  29. }
  30. public double getPrice ()
  31. {
  32. return price;
  33. }
  34. public void setPrice (double price)
  35. {
  36. if(price> 0) this.price = price;
  37. else throw new IllegalArgumentException( "住宅的价格必须大于0");
  38. }
  39. public int compareTo (House o)
  40. {
  41. if (price/area>o.price/o.area) return 1;
  42. else if (price/area<o.price/o.area) return - 1;
  43. else return 0;
  44. }
  45. @Override
  46. public String toString () {
  47. return "House{" + "address=" + address + ", area=" + area + ", price=" + price + '}';
  48. }
  49. }
  50. public class Main {
  51. public static void main (String[] args) {
  52. Scanner input = new Scanner(System.in);
  53. for( int i= 0; i< 10; i++) {
  54. try
  55. {
  56. House house1 = new House(input.next(), input.nextDouble(), input.nextDouble());
  57. House house2 = new House(input.next(), input.nextDouble(), input.nextDouble());
  58. House maxHouse;
  59. if (house1.compareTo(house2)>= 0)
  60. maxHouse = house1;
  61. else
  62. maxHouse=house2;
  63. System.out.println( "The max of " + house1 + " and " + house2 + " is " +maxHouse);
  64. } catch (IllegalArgumentException e1) {
  65. System.out.println(e1.getMessage());
  66. input.nextLine();
  67. } catch (Exception e2) {
  68. System.out.println(e2.getMessage());
  69. input.nextLine();
  70. }
  71. }
  72. }
  73. }

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次。每次循环从键盘读入数据创建两个矩形对象,比较并输出其中较大的对象的面积;如果捕捉到异常,则输出异常信息。

  
  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main (String[] args) {
  4. Scanner input = new Scanner(System.in);
  5. for( int i= 0; i< 6; i++) {
  6. try
  7. {
  8. Rectangle rectangle1 = new Rectangle(input.nextDouble(),input.nextDouble());
  9. Rectangle rectangle2 = new Rectangle(input.nextDouble(),input.nextDouble());
  10. Rectangle maxRectangle;
  11. if (rectangle1.compareTo(rectangle2)>= 0)
  12. maxRectangle=rectangle1;
  13. else
  14. maxRectangle=rectangle2;
  15. System.out.println( "The max area of " + rectangle1 + " and " + rectangle2 + " is " + maxRectangle.getArea());
  16. }
  17. catch(IllegalArgumentException e1) {
  18. System.out.println(e1.getMessage());
  19. input.nextLine();
  20. } catch (Exception e2) {
  21. System.out.println(e2.getMessage());
  22. input.nextLine();
  23. }
  24. }
  25. }
  26. }
  27. class Rectangle implements Comparable<Rectangle>
  28. {
  29. private double width;
  30. private double height;
  31. public Rectangle () {
  32. width= 0;
  33. height= 0;
  34. }
  35. public Rectangle (double width, double height) {
  36. setWidth(width);
  37. getHeight(height);
  38. }
  39. public double getWidth () {
  40. return width;
  41. }
  42. public void setWidth (double width) {
  43. if(width>= 0)
  44. this.width = width;
  45. else
  46. throw new IllegalArgumentException( "矩形的宽度必须大于等于0");
  47. }
  48. public double getHeight () {
  49. return height;
  50. }
  51. public void setHeight (double height) {
  52. if(height>= 0)
  53. this.height = height;
  54. else
  55. throw new IllegalArgumentException( "矩形的高度必须大于等于0");
  56. }
  57. public double getArea () {
  58. return width*height;
  59. }
  60. public double getPerimeter () {
  61. return 2*(width+height);
  62. }
  63. public int compareTo (Rectangle rectangle) {
  64. if (getArea()>rectangle.getArea())
  65. return 1;
  66. else if (getArea()<rectangle.getArea())
  67. return - 1;
  68. else
  69. return 0;
  70. }
  71. public String toString () {
  72. return "Rectangle(width:"+width+ ",height:"+height+ ")";
  73. }
  74. }

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类的设计程序。

  
  1. import java.util.Scanner;
  2. class Box
  3. {
  4. private boolean full;
  5. private int width;
  6. private int height;
  7. private int lenght;
  8. public Box (int width,int heigth,int length) {
  9. full = false;
  10. this.width = width;
  11. this.height = height;
  12. this.lenght = lenght;
  13. }
  14. public boolean isFull () {
  15. return full;
  16. }
  17. public void setFull (boolean full) {
  18. this.full = full;
  19. }
  20. public int getWidth () {
  21. return width;
  22. }
  23. public void setWidth (int width) {
  24. this.width = width;
  25. }
  26. public int getHeight () {
  27. return height;
  28. }
  29. public void setHeight (int h) {
  30. this.height = height;
  31. }
  32. public int getLenght () {
  33. return lenght;
  34. }
  35. public void setLenght (int lenght) {
  36. this.lenght = lenght;
  37. }
  38. public int getVolumn () {
  39. return width*height*length;
  40. }
  41. @Override
  42. public String toString ()
  43. {
  44. return "Box is " + (full ? "full" : "empty") + ", The Volumn is " + getVolumn();
  45. }
  46. }
  47. public class Main {
  48. public static void main (String[] args) {
  49. Scanner input = new Scanner(System.in);
  50. int w = input.nextInt();
  51. int h = input.nextInt();
  52. int l = input.nextInt();
  53. Box box1 = new Box(w,h,l);
  54. System.out.println(box1.toString());
  55. box1.setWidth( 5);
  56. box1.setFull( true);
  57. System.out.println(box1.toString());
  58. }
  59. }

四、函数题

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

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

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


   
  1. 在这里给出主类
  2. import java.util.*;
  3. public class Main {
  4. public static void main (String[] args) {
  5. double s= 0;
  6. Scanner sc= new Scanner(System.in);
  7. double r1,r2;
  8. r1=sc.nextDouble();
  9. r2=sc.nextDouble();
  10. Circle c1= new Circle(r1);
  11. Circle c2= new Circle(r2);
  12. try{
  13. s = c1.area();
  14. System.out.println(s);
  15. s = c2.area();
  16. System.out.println(s);
  17. }
  18. catch (CircleException e){
  19. e.print();
  20. }
  21. }
  22. }
  23. /* 请在这里填写答案 编写Circle 和CircleException类*/

   
  1. 3.5 - 3.5
  2. 38.465
  3. 圆半径为- 3.5不合理

  
  1. class Circle
  2. {
  3. double r;
  4. public Circle (double r)
  5. {
  6. this.r=r;
  7. }
  8. double area () throws CircleException
  9. {
  10. if( this.r>= 0) return 3.14*r*r;
  11. else throw new CircleException( this.r);
  12. }
  13. }
  14. class CircleException extends Exception
  15. {
  16. double r;
  17. public CircleException (double r)
  18. {
  19. this.r=r;
  20. }
  21. void print ()
  22. {
  23. System.out.print( "圆半径为"+ this.r+ "不合理");
  24. }
  25. }

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

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

public static boolean isSorted(int[] list)

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

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


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

6-3 设计一个矩形类Rectangle

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


   
  1. import java.util.Scanner;
  2. /* 你的代码将被嵌入到这里 */
  3. public class Main {
  4. public static void main (String[] args) {
  5. Scanner input = new Scanner(System.in);
  6. double w = input.nextDouble();
  7. double h = input.nextDouble();
  8. Rectangle myRectangle = new Rectangle(w, h);
  9. System.out.println(myRectangle.getArea());
  10. System.out.println(myRectangle.getPerimeter());
  11. input.close();
  12. }
  13. }

   
  1. 3.14 2.78
  2. 8.7292
  3. 11.84

  
  1. class Rectangle
  2. {
  3. double width;
  4. double height;
  5. public Rectangle ()
  6. {
  7. width= 1;
  8. height= 1;
  9. }
  10. public Rectangle (double width,double height)
  11. {
  12. this.width=width;
  13. this.height=height;
  14. }
  15. public double getArea ()
  16. {
  17. return height*width;
  18. }
  19. public double getPerimeter ()
  20. {
  21. return (width+height)* 2;
  22. }
  23. }

6-4 Person类

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


   
  1. import java.util.Scanner;
  2. public class Main{
  3. public static void main (String[] args) {
  4. Scanner scan = new Scanner(System.in);
  5. String name = scan.next();
  6. String sex = scan.next();
  7. int age = scan.nextInt();
  8. Person p = new Person();
  9. p.setName(name);
  10. p.setSex(sex);
  11. p.setAge(age);
  12. p.print();
  13. scan.close();
  14. }
  15. }
  16. /* 你的代码被嵌在这里 */

   
  1. Lucy male 23
  2. name:Lucy; sex:male; age: 23

  
  1. class Person
  2. {
  3. String name;
  4. String sex;
  5. int age;
  6. public void setName (String name)
  7. {
  8. this.name=name;
  9. }
  10. public void setSex (String sex)
  11. {
  12. this.sex=sex;
  13. }
  14. public void setAge (int age)
  15. {
  16. this.age=age;
  17. }
  18. public void print ()
  19. {
  20. System.out.print( "name:"+name+ "; sex:"+sex+ "; age:"+age);
  21. }
  22. }

6-5 是否偶数


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

6-6 Java类实现-正方形

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


   
  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main (String[] args) {
  4. Scanner scanner= new Scanner(System.in);
  5. while(scanner.hasNextFloat()){
  6. double s=scanner.nextDouble();
  7. Square c = new Square(s);
  8. System.out.printf( "%.2f %.2f\n",c.getArea(),c.getLength());
  9. c.setSide(c.getSide()* 2);
  10. System.out.printf( "%.2f %.2f\n",c.getArea(),c.getLength());
  11. }
  12. }
  13. }
  14. /* 请在这里填写答案 */

   
  1. 1
  2. 2
  3. 3
  4. 以输入的浮点数作为边长创建正方型对象,输出正方型的面积和周长;将正方形的边长修改为原边长的 2倍,输出修改后正方形的面积和周长。
  5. 1.00 4.00
  6. 4.00 8.00
  7. 4.00 8.00
  8. 16.00 16.00
  9. 9.00 12.00
  10. 36.00 24.00

  
  1. class Square
  2. {
  3. private double s;
  4. public Square (double s)
  5. {
  6. this.s=s;
  7. }
  8. public double getSide ()
  9. {
  10. return s;
  11. }
  12. public double getArea ()
  13. {
  14. return s*s;
  15. }
  16. public double getLength ()
  17. {
  18. return s* 4;
  19. }
  20. public void setSide (double s)
  21. {
  22. this.s=s;
  23. }
  24. }

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对象,三个对象分别支付一笔钱作为班费,最后组织一次班级活动。


   
  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main (String args[]){
  4. Scanner input = new Scanner(System.in);
  5. System.out.println( "numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());
  6. StudentOf2019EE a = new StudentOf2019EE( "Tom");
  7. StudentOf2019EE b = new StudentOf2019EE( "Jerry", 200);
  8. StudentOf2019EE c = a;
  9. a.payClazzMoney(input.nextInt());
  10. System.out.println( "numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());
  11. b.payClazzMoney(input.nextInt());
  12. System.out.println( "numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());
  13. c.payClazzMoney(input.nextInt());
  14. System.out.println( "numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());
  15. StudentOf2019EE.clazzActivity(input.nextInt());
  16. System.out.println( "numberOfObjects=" + StudentOf2019EE.getNumberOfObjects() + ",clazzMoney=" + StudentOf2019EE.getClazzMoney());
  17. }
  18. }
  19. /* 请在这里填写答案 */

   
  1. 50
  2. 300
  3. 100
  4. 400
  5. numberOfObjects= 0,clazzMoney= 0
  6. numberOfObjects= 2,clazzMoney= 50
  7. numberOfObjects= 2,clazzMoney= 250
  8. numberOfObjects= 2,clazzMoney= 300
  9. numberOfObjects= 2,clazzMoney= 0

  
  1. class StudentOf2019EE
  2. {
  3. private String name;
  4. private int money;
  5. private static int numberOfObjects= 0; //表示StudentOf2019EE对象的数量
  6. private static int clazzMoney= 0; //全体学生缴纳的班费余额
  7. public StudentOf2019EE (String name)
  8. {
  9. this.name=name;
  10. money= 100;
  11. numberOfObjects++;
  12. }
  13. public StudentOf2019EE (String name,int money)
  14. {
  15. this.name=name;
  16. this.money=money;
  17. numberOfObjects++;
  18. }
  19. public String getName ()
  20. {
  21. return name;
  22. }
  23. public int getMoney ()
  24. {
  25. return money;
  26. }
  27. public void payClazzMoney (int amount)
  28. {
  29. if(getMoney()>=amount)
  30. {
  31. clazzMoney+=amount;
  32. money-=amount;
  33. } else
  34. {
  35. clazzMoney+=getMoney();
  36. money= 0;
  37. }
  38. }
  39. public static void clazzActivity (int amount)
  40. {
  41. if(clazzMoney<amount)
  42. clazzMoney-=clazzMoney;
  43. else clazzMoney-=amount;
  44. }
  45. public static int getNumberOfObjects ()
  46. {
  47. return numberOfObjects;
  48. }
  49. public static int getClazzMoney ()
  50. {
  51. return clazzMoney;
  52. }
  53. }

6-8 数组求和


  
  1. static int sum (int[] a)
  2. {
  3. int s= 0;
  4. for( int x:a) s+=x;
  5. return s;
  6. }
  7. static int sum (int[] a,int start)
  8. {
  9. int s= 0;
  10. for( int i=start;i<a.length;i++) s+=a[i];
  11. return s;
  12. }
  13. static int sum (int[] a,int start,int end)
  14. {
  15. int s= 0;
  16. for( int i=start;i<end;i++) s+=a[i];
  17. return s;
  18. }

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次。每次循环从键盘读入数据创建两个矩形对象,比较并输出其中较大的对象的面积;如果捕捉到异常,则输出异常信息。


   
  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main (String[] args) {
  4. Scanner input = new Scanner(System.in);
  5. for( int i= 0; i< 6; i++) {
  6. try{
  7. Rectangle rectangle1 = new Rectangle(input.nextDouble(), input.nextDouble());
  8. Rectangle rectangle2 = new Rectangle(input.nextDouble(), input.nextDouble());
  9. Rectangle maxRectangle;
  10. if (rectangle1.compareTo(rectangle2)>= 0)
  11. maxRectangle = rectangle1;
  12. else
  13. maxRectangle = rectangle2;
  14. System.out.println( "The max area of " + rectangle1 + " and " + rectangle2 + " is " + maxRectangle.getArea());
  15. } catch (IllegalArgumentException e1) {
  16. System.out.println(e1.getMessage());
  17. input.nextLine();
  18. } catch (Exception e2) {
  19. System.out.println(e2.getMessage());
  20. input.nextLine();
  21. }
  22. }
  23. }
  24. }
  25. /* 请在这里填写答案 */

   
  1. - 1 1 1 1
  2. 1 - 1 1 1
  3. 1 1 - 1 1
  4. 1 1 1 - 1
  5. 3 4 2 5
  6. 3 4 2 7
  7. 矩形的宽度必须大于等于 0
  8. 矩形的高度必须大于等于 0
  9. 矩形的宽度必须大于等于 0
  10. 矩形的高度必须大于等于 0
  11. The max area of Rectangle (width:3.0,height:4.0) and Rectangle (width:2.0,height:5.0) is 12.0
  12. The max area of Rectangle (width:3.0,height:4.0) and Rectangle (width:2.0,height:7.0) is 14.0

  
  1. class Rectangle implements Comparable<Rectangle>
  2. {
  3. private double width;
  4. private double height;
  5. public Rectangle ()
  6. {
  7. width= 0;
  8. height= 0;
  9. }
  10. public Rectangle (double width,double height)
  11. {
  12. setWidth(width);
  13. setHeight(height);
  14. }
  15. public void setWidth (double width)
  16. {
  17. if(width>= 0) this.width=width;
  18. else throw new IllegalArgumentException( "矩形的宽度必须大于等于0");
  19. }
  20. public void setHeight (double height)
  21. {
  22. if(height>= 0) this.height=height;
  23. else throw new IllegalArgumentException( "矩形的高度必须大于等于0");
  24. }
  25. public double getArea ()
  26. {
  27. return height*width;
  28. }
  29. public double getPerimeter ()
  30. {
  31. return (height+width)* 2;
  32. }
  33. public int compareTo (Rectangle o)
  34. {
  35. if(getArea()>o.getArea()) return 1;
  36. else if(getArea()==o.getArea()) return 0;
  37. else return - 1;
  38. }
  39. public String toString ()
  40. {
  41. return "Rectangle(width:"+width+ ",height:"+height+ ")";
  42. }
  43. }

五、编程题

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的周长,然后输出其面积与周长。


  
  1. import java.util.*;
  2. class Main
  3. {
  4. public static void main (String[] args)
  5. {
  6. Scanner sc= new Scanner(System.in);
  7. double l=sc.nextDouble(),w=sc.nextDouble();
  8. Rectangle rect= new Rectangle();
  9. rect.setXY(l,w);
  10. System.out.printf( "面积为%.1f\n",rect.getArea());
  11. System.out.printf( "周长为%.1f",rect.getPerimeter());
  12. }
  13. }
  14. class Rectangle
  15. {
  16. private double l;
  17. private double w;
  18. public Rectangle ()
  19. {
  20. l= 0;
  21. w= 0;
  22. }
  23. public void setXY (double a,double b)
  24. {
  25. l=a;
  26. w=b;
  27. }
  28. public double getArea ()
  29. {
  30. return l*w;
  31. }
  32. public double getPerimeter ()
  33. {
  34. return (l+w)* 2;
  35. }
  36. }

7-2 重复数据问题


  
  1. import java.util.*;
  2. class Main
  3. {
  4. public static void main (String[] args)
  5. {
  6. Scanner sc= new Scanner(System.in);
  7. String s=sc.nextLine();
  8. String[] a=s.split( " ");
  9. Set<Integer> st= new HashSet<>();
  10. for(String x:a)
  11. {
  12. int t=Integer.parseInt(x);
  13. st.add(t);
  14. }
  15. if(st.size()==a.length) System.out.print( "no");
  16. else System.out.print( "yes");
  17. }
  18. }

7-3 矩阵相加


  
  1. import java.util.Scanner;
  2. class Main
  3. {
  4. public static Scanner scan= new Scanner(System.in);
  5. public static void main (String[] args)
  6. {
  7. int m=scan.nextInt(),n=scan.nextInt();
  8. int[][] a= new int[m][n];
  9. inputData(a);
  10. int[][] b= new int[m][n];
  11. inputData(b);
  12. int[][] c= new int[m][m];
  13. c=addMatrix(a,b);
  14. showResult(c);
  15. }
  16. public static void inputData (int[][] arr)
  17. {
  18. for( int i = 0;i<arr.length;i++)
  19. for( int j= 0;j<arr[i].length;j++)
  20. arr[i][j] =scan.nextInt();
  21. }
  22. public static int[][] addMatrix( int[][]arr1, int[][]arr2)
  23. {
  24. int [][] c = new int[arr1.length][arr1[ 0].length];
  25. for( int i = 0;i<arr1.length;i++)
  26. for( int j = 0;j<arr1[i].length;j++)
  27. c[i][j] = arr1[i][j] + arr2[i][j];
  28. return c;
  29. }
  30. public static void showResult (int[][] arr)
  31. {
  32. for( int i = 0;i<arr.length;i++)
  33. {
  34. for( int j = 0;j<arr[i].length;j++)
  35. System.out.print( " "+arr[i][j]);
  36. System.out.println();
  37. }
  38. }
  39. }

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


  
  1. import java.util.*;
  2. class Main
  3. {
  4. public static void main (String[] args)
  5. {
  6. Scanner sc= new Scanner(System.in);
  7. double w=sc.nextDouble(),h=sc.nextDouble();
  8. if(h<= 0.0||h> 2.72||w<= 0.0||w> 727) System.out.print( "input out of range");
  9. else
  10. {
  11. double bmi=w/(h*h);
  12. if(bmi< 18.5) System.out.print( "thin");
  13. else if(bmi>= 18.5&&bmi< 24) System.out.print( "fit");
  14. else if(bmi>= 24&&bmi< 28) System.out.print( "overweight");
  15. else System.out.print( "fat");
  16. }
  17. }
  18. }

7-5 闰年判断


  
  1. import java.util.*;
  2. class Main
  3. {
  4. public static void main (String[] args)
  5. {
  6. Scanner sc= new Scanner(System.in);
  7. int year=sc.nextInt();
  8. if((year% 4== 0&&year% 100!= 0)||year% 400== 0) System.out.print( "yes");
  9. else System.out.print( "no");
  10. }
  11. }


转载:https://blog.csdn.net/weixin_61639349/article/details/129117866
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场