2023面向对象程序设计《实验2》-类与对象

上传练习题答案的初心是监督我自己的Java训练and希望在大家没有思路的时候提供方法让大家获得柳暗花明又一村的感觉,而不是希望大家只一味地摘抄答案做重复而又毫无意义的事情。

T1.请补充以下代码,完成输出要求。

public class Main {
    public Main(){
        System.out.println("构造方法一被调用了");
    }
    public Main(int x){
        this();
        System.out.println("构造方法二被调用了");
    }
    public Main(boolean b){
        this(1);
        System.out.println("构造方法三被调用了");
    }
    public static void main(String[] args) {
        
    }
}

输入格式:

输出格式:

构造方法一被调用了
构造方法二被调用了
构造方法三被调用了
public class Main {
    public Main(){
        System.out.println("构造方法一被调用了");
    }
    public Main(int x){
        this();
        System.out.println("构造方法二被调用了");
    }
    public Main(boolean b){
        this(1);
        System.out.println("构造方法三被调用了");
    }
    public static void main(String[] args) {
    new Main(true);
    }
}

T2.

设计一个BankAccount类,这个类包括:

(1)一个int型的balance表时账户余额。

(2)一个无参构造方法,将账户余额初始化为0。

(3)一个带一个参数的构造方法,将账户余额初始化为该输入的参数。

(4)一个getBlance()方法,返回账户余额。

(5)一个withdraw()方法:带一个amount参数,并从账户余额中提取amount指定的款额。

(6)一个deposit()方法:带一个amount参数,并将amount指定的款额存储到该银行账户上。

设计一个Main类进行测试,分别输入账户余额、提取额度以及存款额度,并分别输出账户余额。

输入格式:

依次输入账户余额、提取额度、存款额度

输出格式:

依次输出初始账户余额、提取amount额度后的账户余额、存入amount后的账户余额

输入样例:

在这里给出一组输入。例如:

700
70
7

输出样例:

在这里给出相应的输出。例如:

700
630
637
import java.util.Scanner;
class BankAccount {
    int balance=0;
    public BankAccount(int i){
        balance=i;
    }
    public int getBalance(){
        return balance;
    }
    public int withdraw(int amount){
        balance-=amount;
        return balance;
    }
    public int deposit(int amount){
        balance+=amount;
        return balance;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int a=in.nextInt();
        int b=in.nextInt();
        int c=in.nextInt();
        BankAccount ZU=new BankAccount(a);
        System.out.println(ZU.getBalance());
        System.out.println(ZU.withdraw(b));
        System.out.println(ZU.deposit(c));
    }
}

T3.

a 定义圆类Circle,其中包括:

  1. 成员变量定义 private int radius

  1. 方法定义 包括下列要求

  1. 定义无参构造方法 ,给radius赋值为2,并添加语句System.out.println("this is a constructor");

  1. 定义有参构造方法 ,接收用户给给radius赋值,如果用户输入半径为<=0,则让半径的值为2,并添加语句System.out.println("this is a constructor with para");

  1. 为radius半径添加setter方法,接收用户输入的半径,如果用户输入半径为<=0,则让半径的值为2

  1. 为radius半径添加getter方法,返回用户输入的半径

  1. 定义求面积方法public int gerArea(),π使用Math.PI代替,面积的结果强制转换为int返回

  1. 定义toString方法,public String toString( )方法体为:
    return "Circle [radius=" + radius + "]";

b定义Main类,在main方法中,完成下列操作

  1. .定义并创建Circle的第一个对象c1,并使用println方法输出c1

  1. 求c1的面积并输出

  1. 定义并创建Circle的第一个对象c2,并使用println方法输出c2

  1. 从键盘接收整数半径,并赋值给c2的半径,使用println方法输出c2

  1. 求c2的面积并输出

  1. 从键盘接收整数半径,并创建Circle的第三个对象c3,并将用户输入整数半径通过有参构造方法传递给出c3,使用println方法输出c3

  1. 求c3的面积并输出

### 输入格式: 从键盘输入一个整数半径

输出格式:

分别输出c1和c2对象的信息

输入样例:

在这里给出一组输入。例如:

4
5
-4
-2

输出样例:

在这里给出相应的输出。例如:

this is a constructor
Circle [radius=2]
c1:area=12
this is a constructor
Circle [radius=2]
Circle [radius=4]
c2:area=50
this is a constructor with para
Circle [radius=5]
c3:area=78
this is a constructor
Circle [radius=2]
c1:area=12
this is a constructor
Circle [radius=2]
Circle [radius=2]
c2:area=12
this is a constructor with para
Circle [radius=2]
c3:area=12
import java.util.Scanner;
class Circle {
    private int radius;
    public Circle(){
        radius=2;
        System.out.println("this is a constructor");
    }
    public  Circle(int x){
        if(x<=0)
            this.radius=2;
        else
            this.radius=x;
        System.out.println("this is a constructor with para");
    }

    void  setter(int x){
        if(x<=0)
            this.radius=2;
        else
            this.radius=x;
    }
    public int getter(){
        return radius;
    }
    public int getArea(){
        int S= (int) (Math.PI*radius*radius);
        return S;
    }
    public String toString( ){
        return "Circle [radius=" + radius + "]";
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        Circle c1=new Circle();
        System.out.println(c1);
        System.out.println("c1:area="+c1.getArea());
        Circle c2=new Circle();
        System.out.println(c2);
        int r=in.nextInt();
        c2.setter(r);
        System.out.println(c2);
        System.out.println("c2:area="+c2.getArea());
        r=in.nextInt();
        Circle c3=new Circle(r);
        System.out.println(c3);
        System.out.println("c3:area="+c3.getArea());
    }
}

T4.

构造日期类MyDate类,包含年月日,提供相应的get和set函数,提供void print()函数打印日期,提供int compare(MyDate d)测试当前对象和参数对象d的早晚,如果早则返回-1,晚则返回1,相等则返回0

在main函数中,读入两个日期对象,输出第一个日期对象的信息,输出两个对象的比较结果

输入格式:

两个日期对象,第一个为当前日期对象的年月日,第二个为待比较日期对象的年月日

输出格式:

当前日期对象的信息,当前对象和待比较日期对象的比较结果

输入样例:

在这里给出一组输入。例如:

2008 6 12 2009 6 22

输出样例:

在这里给出相应的输出。例如:

6/12/2008 -1
import java.util.Scanner;
class MyDate {
    int y,m,d;
    public MyDate(int y1,int m1,int d1){
        y=y1;
        m=m1;
        d=d1;
    }
    public void print(){
        System.out.printf("%d/%d/%d ",m,d,y);
    }
    int compare(MyDate d)
    {
        if(this.y > d.y)
        {
            return 1;
        }
        else if(this.y < d.y)
        {
            return -1;
        }
        else
        {
            if(this.m > d.m)
            {
                return 1;
            }
            else if(this.m < d.m)
            {
                return -1;
            }
            else
            {
                if(this.d > d.d)
                {
                    return 1;
                }
                else if(this.d < d.d)
                {
                    return -1;
                }
                else
                    return 0;
            }
}}}

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int y1 = scan.nextInt();
        int m1 = scan.nextInt();
        int d1 = scan.nextInt();
        MyDate p =  new MyDate(y1,m1,d1);
        int y2 = scan.nextInt();
        int m2 = scan.nextInt();
        int d2 = scan.nextInt();
        MyDate d =  new MyDate(y2,m2,d2);
        p.print();
        System.out.println(p.compare(d));
    }
}

T5.

定义一个有关人的Person类,内含属性:

String name、int age、boolean gender、int id,所有的变量必须为私有(private)。

注意:属性顺序请严格按照上述顺序依次出现。

1.编写无参构造函数:

  • 打印"This is constructor"。

  • 将name,age,gender,id按照name,age,gender,id格式输出

2.编写有参构造函数

依次对name,age,gender赋值。

3.覆盖toString函数:

按照格式:类名 [name=, age=, gender=, id=]输出。建议使用Eclipse自动生成.

4.对每个属性生成setter/getter方法

5.main方法中

  • 首先从屏幕读取n,代表要创建的对象个数。

  • 然后输入n行name age gender , 调用上面2编写的有参构造函数新建对象。

  • 然后将刚才创建的所有对象逆序输出。

  • 接下来使用无参构造函数新建一个Person对象,并直接打印该对象。

输入样例:

3
a 11 false
b 12 true
c 10 false

输出样例:

Person [name=c, age=10, gender=false, id=0]
Person [name=b, age=12, gender=true, id=0]
Person [name=a, age=11, gender=false, id=0]
This is constructor
null,0,false,0
Person [name=null, age=0, gender=false, id=0]
import java.util.Scanner;
class Person {
    private String name=null;
    private int age=0;
    private boolean gender=false;
    private int id=0;
    public Person() {
        System.out.println("This is constructor");
        System.out.println(name+","+age+","+gender+","+id);
        System.out.println("Person [name="+name+", age="+age+", gender="+gender+", id="+id+"]");
    }

    public Person(String n, int a, boolean g) {
        this.name = n;
        this.age = a;
        this.gender = g;
    }

    public String toString() {
        System.out.println("Person [name="+this.name+", age="+this.age+", gender="+this.gender+", id="+0+"]");
        return name;
    }
    }

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int number = in.nextInt();
        Person[] arr = new Person[number];
        for(int i=0; i<arr.length; i++) {
            String name = in.next();
            int age = in.nextInt();
            boolean gender = in.nextBoolean();
            arr[i] = new Person(name,age,gender);
        }
        for(int x=arr.length-1; x>=0;x--){
            arr[x].toString();
        }
        Person zuo = new Person();
    }
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值