当前位置: 首页 > news >正文

【Java牛客刷题】入门篇(05)

在这里插入图片描述

🍎个人主页:亮点菌的博客
🍊个人信条:点亮编程之路,做自己的亮点
🍓
参加活动:
CSDN话题挑战赛第2期
🍅参赛话题:学习笔记
🍑刷题专栏:【Java】牛客网刷题


文章目录

  • 1、 补全构造方法
  • 2、重写计算逻辑
  • 3、定义打印方法
  • 4、类型判断
  • 5、实现抽象方法


1、 补全构造方法

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

输入描述: 三个整数:x, y, z
输出描述: 三个整数的乘积:xyz

代码展示:

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

        //write your code here
        super(x,y);
        this.z=z;
    }

    public int getZ() {
        return z;
    }

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

}

示例:

输入:1 2 3
输出:6

2、重写计算逻辑

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

输入描述: 两个整数
输出描述: 两个整数的商(int类型,不考虑小数情况)

代码展示:

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 {

    //write your code here......
    public Sub(int x,int y){
        super(x,y);
    }
    public void calculate() {
        if(getY()==0){
             System.out.println("Error");
        }else{
             System.out.println(super.getX()/super.getY());
        }
       
    }

}

示例:

输入:6 2
输出:3

3、定义打印方法

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

输入描述: 类名
输出描述: 由该类实例化出来的对象的字符串表示

代码展示:

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());
        }
    }

    //write your code here......
    public static void print(Object obj){
        System.out.print(obj.getClass().getName());
    }
    

}

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

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

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

示例:

输入:First
输出:First

4、类型判断

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

输入描述: 输入要实例化的类名:Base、Sub1、Sub2 三者之一。
输出描述: 返回实例的实际类名(简化类名,不包含包的名字)。

代码展示:

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String className = br.readLine();
            Base obj = (Base) Class.forName(className).newInstance();
            System.out.println(getClassName(obj));
    }

    public static String getClassName(Base obj) {
        return obj.getClass().getName();
    }

}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}

示例:

输入:Sub1
输出:Sub1

5、实现抽象方法

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

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

代码展示:

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 {

    //write your code here......
    public int sum(){
        return getX()+getY();
    }
    public int avg(){
        return sum()/2;
    }

}

示例:

输入:1 2
输出:3

相关文章:

  • docker入门
  • 【NodeJs-5天学习】第四天存储篇① ——安装使用mysql 8.0
  • 【Verilog 流水线设计】以全加器为例阐述流水线设计的影响
  • spring boot 使用Mybatis-plus的查询方法
  • nginx中root和alias的区别
  • pytorch深度学习训练模板
  • 【Qt+FFMPEG】 - 封装 解码音视频 线程
  • Arduino框架下最便宜的开发芯片-CH552初探
  • Java高并发编程实战5,异步注解@Async自定义线程池
  • 前端进阶——ES6
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • 【Python+大数据】第一天:安装VMware及Centos,配置虚拟机网络,学习Linux命令。研究生开学10天的感受。
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • JAVA代码操作HDFS
  • web前端开发基础教程一
  • [译] React v16.8: 含有Hooks的版本
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • chrome扩展demo1-小时钟
  • css的样式优先级
  • Docker 笔记(2):Dockerfile
  • EventListener原理
  • JavaScript创建对象的四种方式
  • Lsb图片隐写
  • Redis中的lru算法实现
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 基于axios的vue插件,让http请求更简单
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 盘点那些不知名却常用的 Git 操作
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 微信小程序--------语音识别(前端自己也能玩)
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ( 10 )MySQL中的外键
  • (3)STL算法之搜索
  • (4)Elastix图像配准:3D图像
  • (八十八)VFL语言初步 - 实现布局
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (原創) 未来三学期想要修的课 (日記)
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .htaccess 强制https 单独排除某个目录
  • .net 流——流的类型体系简单介绍
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net和php怎么连接,php和apache之间如何连接
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .php文件都打不开,打不开php文件怎么办
  • @Autowired标签与 @Resource标签 的区别
  • @Resource和@Autowired的区别