首页 > 编程语言 >Java 入门练习:21 - 25

Java 入门练习:21 - 25

时间:2024-08-09 19:24:41浏览次数:16  
标签:25 Java 21 int class Base return public scanner

JAVA21 补全构造方法

描述

有父类 Base,内部定义了 x、y 属性。有子类 Sub,继承自父类 Base。子类新增了一个 z 属性,并且定义了 calculate 方法,在此方法内计算了父类和子类中 x、y、z 属性三者的乘积。请补全子类构造方法的初始化逻辑,使得该计算逻辑能够正确执行。

输入描述

三个整数:x, y, z

输出描述

三个整数的乘积:xyz

示例1

输入:

1 2 3

输出:

解答

主要考察 super 关键字的运用,Sub 是子类,所以在初始化构造器时,需要先用 super 继承父类 Base 中的构造方法。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            int z = scanner.nextInt();
            Sub sub = new Sub(x, y, z);
            System.out.println(sub.calculate());
        }
    }

}

class Base {

    private int x;
    private int y;

    public Base(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

}

class Sub extends Base {

    private int z;

    public Sub(int x, int y, int z) {

        super(x, y);
        this.z = z;


    }

    public int getZ() {
        return z;
    }

    public int calculate() {
        return super.getX() * super.getY() * this.getZ();
    }

}

JAVA22 重写计算逻辑

描述

在父类 Base 中定义了计算方法 calculate(),该方法用于计算两个数的乘积(X*Y)。请在子类Sub中重写该方法,将计算逻辑由乘法改为除法(X/Y)。注意,当分母为0时输出 “Error”。

输入描述

两个整数

输出描述

两个整数的商(int类型,不考虑小数情况)

示例1

输入:

6 2

复制

输出:

3

复制

示例2

输入:

1 0

复制

输出:

Error

解答

首先,既然是继承,那么要继承父类的构造方法,然后就是利用条件语句 if...else... 进行重写 calculate() 方法。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            Sub sub = new Sub(x, y);
            sub.calculate();
        }
    }

}

class Base {

    private int x;
    private int y;

    public Base(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public void calculate() {
        System.out.println(getX() * getY());
    }

}

class Sub extends Base {
    public Sub(int x, int y) {
        super(x, y);
    }

    public void calculate() {
        if (getY() == 0)
            System.out.println("Error");
        else
            System.out.println(getX() / getY());
    }
}

JAVA23 定义打印方法

描述

已知有三个类:First、Second、Third。要求定义一个打印方法,支持传入任意引用类型的参数(包括上述三个类),并在方法内部打印出对象的字符串形式。

输入描述

类名

输出描述

由该类实例化出来的对象的字符串表示

示例1

输入:

First

复制

输出:

First

解答

和简单的方法没啥两样,主要区别在于传参的类型,平常传参我们都是传的具体的类,但是这里传的参是一个 Object 类型,表示我们可以传任意类型的参数。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String className = scanner.next();
            // print就是需要你定义的方法
            print(Class.forName(className).newInstance());
        }
    }

    public static void print(Object obj) {
        System.out.print(obj.toString());
    }

}

class First {
    public String toString() {
        return "First";
    }
}

class Second {
    public String toString() {
        return "Second";
    }
}

class Third {
    public String toString() {
        return "Third";
    }
}

JAVA24 类型判断

描述

父类Base有两个子类:Sub1、Sub2,现有一个方法getClassName(),要求传入Base类型的实例,在方法内部判定其具体的类型,返回的是类型的简单名字(不含包名),请补全getClassName()方法的判断逻辑。

输入描述

输入要实例化的类名:Base、Sub1、Sub2 三者之一。

输出描述

返回实例的实际类名(简化类名,不包含包的名字)。

示例1

输入:

Sub1

复制

输出:

Sub1

复制

示例2

输入:

Sub2

复制

输出:

Sub2

复制

示例3

输入:

Base

复制

输出:

Base

解答

利用关键字 instanceof 判断一个对象是否属于某个类,接着调用 Object 类的 getClass() 方法来获得 Class 对象,最后用 getSimpleName() 方法就可以或者获取这个对象所属类的名称。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String className = scanner.next();
            Base obj = (Base) Class.forName(className).newInstance();
            System.out.println(getClassName(obj));
        }
    }

    public static String getClassName(Base obj) {

        if (obj instanceof Sub1) {
            Sub1 sub1 = (Sub1) obj;
            return sub1.getClass().getSimpleName();
        } else if (obj instanceof Sub2) {
            Sub2 sub2 = (Sub2) obj;
            return sub2.getClass().getSimpleName();
        } else {
            return obj.getClass().getSimpleName();
        }
    }

}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}

JAVA25 实现抽象方法

描述

已知抽象类Base中定义了calculate方法,该方法的计算过程依赖于sum()和avg(),而后两个方法均为抽象方法。要求定义Base的子类Sub类,并实现父类的抽象方法,使得main函数中的运算逻辑得以正确执行。

输入描述

两个整数

输出描述

两个整数的和除以两个整数的平均值(平均值为int类型,不考虑小数问题)

示例1

输入:

1 2

复制

输出:

3

解答

主要就是考察继承的知识点,继承了抽象方法,那么此时只需要对方法进行重写即可。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // Sub是需要你定义的子类
        Base base = new Sub();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            base.setX(x);
            base.setY(y);
            System.out.println(base.calculate());
        }
    }

}

abstract class Base {

    private int x;
    private int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int calculate() {
        if (avg() == 0) {
            return 0;
        } else {
            return sum() / avg();
        }
    }

    /**
     * 返回x和y的和
     */
    public abstract int sum();

    /**
     * 返回x和y的平均值
     */
    public abstract int avg();

}

class Sub extends Base {

    public  int sum() {
        return super.getX() + super.getY();
    }

    public  int avg() {
        return sum() / 2;
    }
}

标签:25,Java,21,int,class,Base,return,public,scanner
From: https://blog.csdn.net/paofuluolijiang/article/details/140880063

相关文章

  • Java 入门练习:26 - 30
    JAVA26实现接口描述已知接口Comparator,内部定义了max函数,用于返回两个整数中的最大值。请定义该接口的实现类,使得main方法中的比较逻辑可以正确执行,要求实现类的名称为ComparatorImpl。输入描述两个整数输出描述两个整数中的最大值示例1输入:13输出:3解......
  • Java 入门练习:16 - 20
    JAVA16数组遍历描述将用户输入的六个数字填入数组并找出数组中最大值和最小值输入描述随机输入的6个整数输出描述输出数组中的最大值,最小值(最大值最小值之间用空格隔开。若有多个最大值或最小值,输出一次即可,如样例2所示)示例1输入:135246输出:61示例2......
  • Java中数组算法的学习
    数组的算法目录数组的算法概述冒泡排序选择排序排序算法库StreamAPI概述简单排序:冒泡排序、选择排序、插入排序高级排序:快速排序、归并排序、希尔排序相关算法知识:划分、递归、二分查找冒泡排序原理:从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,......
  • CF1253F Cheap Robot
    Codeforces,luogu。如果我们从走的路径长短出发去思考问题会很困难。因为目的是走到终点,求出容量,这一过程中只有行与不行之分。从此出发,对于当前点\(u\),可以通过走到最近的一个充电站再走回来以增加当前电量。因此我们要处理每个点到最近充电站的距离。距离可以通过建一个超级源......
  • Java基础——注解1——注解的定义与使用
    ......
  • java6
    我学习了常见API知识java.lang.Math提供数学常量和方法,如基本的数学运算(加、减、乘、除)、三角函数、对数、幂运算等。常用方法:Math.abs(x):返回x的绝对值。Math.max(a,b):返回a和b中的较大值。Math.min(a,b):返回a和b中的较小值。Math.sqrt(x):返回x的平方根。Math.pow(a,b......
  • Android开发基础07-掌握Java语言
    Android开发广泛使用Java作为编程语言,熟练掌握Java语言是十分必要的。1.基础入门知识a.设置开发环境安装JDK(JavaDevelopmentKit):JDK是进行Java开发的必备工具,务必下载安装并配置相应的环境变量。安装IDE(IntegratedDevelopmentEnvironment):推荐使用IntelliJIDEA、E......
  • 今日Java练习:选择题挑战
    题目选自牛客网1.假设num已经被创建为一个ArrayList对象,并且最初包含以下整数值:[0,0,4,2,5,0,3,0]。执行下面的方法numQuest(),数组num会变成?privateList<Integer>nums;//precondition:nums.size()>0//numscontainsIntegerobjectspublicvoidnumQuest(){int......
  • Java中的8种基本数据类型及其存储方式
    文章目录基本数据类型存储方式整型数据浮点型数据char类型数据布尔类型数据其他数据类型的转换自动转换强制转换基本数据类型Java属于C类语言,有8种数据类型数据类型byteshortintlongfloatdoublecharboolean数据大小8bit16bit32bit64bit32bit64bit8bit/24bit/32bit......
  • 面向忙碌的-Java-开发者的-Python-教程-全-
    面向忙碌的Java开发者的Python教程(全)原文:PythonfortheBusyJavaDeveloper协议:CCBY-NC-SA4.0一、语言让我们从了解Python与Java的不同之处开始我们的Python之旅。在下一章深入研究Python的语法之前,我将帮助你设置Python。Python是什么?Python是一种“......