手把手带你刷好题(牛客刷题②)

简介: 手把手带你刷好题(牛客刷题②)

定义打印方法

描述

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

输入描述:

类名

输出描述:

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

题解:

方法:

多态性,是子类的对象赋给了父类的引用,使用的前提是有继承关系、有方法的重写

本题中的三个类都重写了toString()方法

那么很显然,需要找到一个类,是本题中三个类的共同父类,又有toString()方法

并且有forName()方法和newInstance()方法,以便在print()中能传入一个对象

不用想了,平时就是用 Object类,它是所有类的父类,又拥有各种各样的方法

找到该类以后,把这个类的对象作为参数传给print(),也就是“父类的引用”,

并且在方法体中应用上三个子类都重写了的方法来实现需求

这样,在Class.forName(className).newInstance()时,

就会帮助创建出“子类的对象”

从而实现“父类的引用指向子类的对象”,即多态性

1. import java.util.Scanner;
2. 
3. public class Main {
4. 
5. public static void main(String[] args) throws Exception {
6. Scanner scanner = new Scanner(System.in);
7. while (scanner.hasNext()) {
8. String className = scanner.next();
9. // print就是需要你定义的方法
10.             print(Class.forName(className).newInstance());
11.         }
12.     }
13. 
14. //write your code here......
15. //public static void print(Object obj){
16. //System.out.println(obj.getClass().getName());
17. //}
18. public static void print(Object obj){
19.         System.out.println(obj.toString());
20.     }
21. 
22. }
23. 
24. class First {
25. public String toString() {
26. return "First";
27.     }
28. }
29. 
30. class Second {
31. public String toString() {
32. return "Second";
33.     }
34. }
35. 
36. class Third {
37. public String toString() {
38. return "Third";
39.     }
40. }

类型判断

描述

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

输入描述:

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

输出描述:

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

题解:

方法:这道题要求的是方法中返回实例的具体类型,传入的是一个实例,我们对这个实例调用getClass().getName()即可,直接返回,没什么好说的。

1. import java.util.Scanner;
2. 
3. public class Main {
4. 
5. public static void main(String[] args) throws Exception {
6. Scanner scanner = new Scanner(System.in);
7. while (scanner.hasNext()) {
8. String className = scanner.next();
9. Base obj = (Base) Class.forName(className).newInstance();
10.             System.out.println(getClassName(obj));
11.         }
12.     }
13. 
14. public static String getClassName(Base obj) {
15. 
16. //write your code here......
17. return obj.getClass().getName(); 
18. 
19.     }
20. 
21. }
22. 
23. class Base {
24. 
25. }
26. 
27. class Sub1 extends Base {
28. 
29. }
30. 
31. class Sub2 extends Base {
32. 
33. }

实现抽象方法

描述

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

输入描述:

两个整数

输出描述:

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

题解:

考验对方法的重写,然后调用父类的方法去实现题目的需求而已

1. import java.util.Scanner;
2. 
3. public class Main {
4. 
5. public static void main(String[] args) {
6. // Sub是需要你定义的子类
7. Base base = new Sub();
8. 
9. Scanner scanner = new Scanner(System.in);
10. while (scanner.hasNextInt()) {
11. int x = scanner.nextInt();
12. int y = scanner.nextInt();
13.             base.setX(x);
14.             base.setY(y);
15.             System.out.println(base.calculate());
16.         }
17.     }
18. 
19. }
20. abstract class Base {
21. 
22. private int x;
23. private int y;
24. 
25. public int getX() {
26. return x;
27.     }
28. 
29. public void setX(int x) {
30. this.x = x;
31.     }
32. 
33. public int getY() {
34. return y;
35.     }
36. 
37. public void setY(int y) {
38. this.y = y;
39.     }
40. 
41. public int calculate() {
42. if (avg() == 0) {
43. return 0;
44.         } else {
45. return sum() / avg();
46.         }
47.     }
48. 
49. /**
50.      * 返回x和y的和
51.      */
52. public abstract int sum();
53. 
54. /**
55.      * 返回x和y的平均值
56.      */
57. public abstract int avg();
58. 
59. }
60. 
61. class Sub extends Base {
62. 
63. 
64. //write your code here......
65. public int sum(){
66. 
67. return super.getX()+super.getY();
68. 
69.     }
70. public int avg(){
71. 
72. return sum()/2;
73. 
74.     }
75. 
76. }

实现接口

描述

已知接口Comparator,内部定义了max函数,用于返回两个整数中的最大值。请定义该接口的实现类,使得main方法中的比较逻辑可以正确执行,要求实现类的名称为ComparatorImpl。

输入描述:

两个整数

输出描述:

两个整数中的最大值

题解:

主要考虑对ComparatorImpl实现类重写max方法,注意:接口是用来被实现(implements)的,实现接口的类称为实现类

1. import java.util.Scanner;
2. 
3. public class Main {
4. 
5. public static void main(String[] args) {
6. Comparator comparator = new ComparatorImpl();
7. 
8. Scanner scanner = new Scanner(System.in);
9. while (scanner.hasNextInt()) {
10. int x = scanner.nextInt();
11. int y = scanner.nextInt();
12.             System.out.println(comparator.max(x, y));
13.         }
14.     }
15. 
16. }
17. 
18. interface Comparator {
19. /**
20.      * 返回两个整数中的最大值
21.      */
22. int max(int x, int y);
23. }
24. class ComparatorImpl implements Comparator{
25. 
26. public int max(int x,int y){
27. return x>y?x:y;
28.     }
29. 
30. }


相关文章
|
人工智能 自然语言处理 前端开发
还不懂如何与chatGPT高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(二)进阶篇
这篇文章是chatGPT提示词工程的进阶教程,涵盖了加入鼓励词/行为词、拆分复杂需求、纠正反馈、使用英语提问、角色扮演、限定回答格式、多符咒结合以及参考其他人的提示词和使用提示词插件等技巧。
还不懂如何与chatGPT高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(二)进阶篇
|
运维 关系型数据库 MySQL
【运维面试100问】(三)说说你在故障排除方面的经历_运维面试故障排查类面经
【运维面试100问】(三)说说你在故障排除方面的经历_运维面试故障排查类面经
【运维面试100问】(三)说说你在故障排除方面的经历_运维面试故障排查类面经
|
12月前
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
249 1
|
安全 数据安全/隐私保护 UED
优化用户体验:前后端分离架构下Python WebSocket实时通信的性能考量
在当今互联网技术的迅猛发展中,前后端分离架构已然成为主流趋势,它不仅提升了开发效率,也优化了用户体验。然而,在这种架构模式下,如何实现高效的实时通信,特别是利用WebSocket协议,成为了提升用户体验的关键。本文将探讨在前后端分离架构中,使用Python进行WebSocket实时通信时的性能考量,以及与传统轮询方式的比较。
263 2
|
机器学习/深度学习 人工智能 算法
CV领域再创佳绩!阿里云机器学习平台 PAI 多篇论文入选 ICCV 2023
近期,阿里云机器学习平台PAI发表的多篇论文在ICCV 2023上入选。ICCV是国际计算机视觉大会是由电气和电子工程师协会每两年举办一次的研究大会。与CVPR和ECCV一起,它被认为是计算机视觉领域的顶级会议之一。ICCV 2023将于10月2日至10月6日法国巴黎举办。ICCV汇聚了来自世界各地的学者、工程师和研究人员,分享最新的计算机视觉研究成果和技术进展。会议涵盖了计算机视觉领域的各个方向,包括图像处理、模式识别、机器学习、人工智能等等。ICCV的论文发表和演讲都备受关注,是计算机视觉领域交流和合作的重要平台。
|
运维 Linux Shell
Ansible的介绍与安装
**自动化与Linux系统管理**\n\n学习自动化运维能减少手动任务的错误和遗漏,提高效率。Ansible是一款Python开发的自动化工具,支持多平台,实现批量配置、部署和命令执行。它是无代理的,通过SSH连接管理主机,无需在远程主机安装额外软件。\n\nAnsible具有跨平台、人类可读的自动化语言、描述应用状态、易版本控制、动态清单管理和与其他系统集成等优点。\n\nAnsible的工作流程包括ad-hoc和playbook模式。安装涉及配置YUM源、EPEL源,然后通过yum或dnf安装软件包。在无网络环境下,可以下载rpm包离线安装。
|
前端开发 JavaScript
webpack 和 babel 实用教程【前端必备】
webpack 和 babel 实用教程【前端必备】
212 0
|
存储 关系型数据库 MySQL
MySQL中常见的存储引擎类型
【2月更文挑战第18天】
393 7
|
机器学习/深度学习 传感器 人工智能
基于人工智能的自适应交通流量控制系统
【2月更文挑战第30天】 在现代城市管理中,交通拥堵一直是影响居民生活质量和城市可持续发展的关键问题。本文提出了一个基于人工智能技术的自适应交通流量控制系统,旨在通过实时数据分析、模式识别和预测算法来优化交通信号灯调度,减少交通延误,提高道路使用效率。系统采用多层神经网络与深度学习技术进行交通流状态的特征提取和趋势预测,同时结合边缘计算提升响应速度,确保了控制的实时性和准确性。本研究的创新点在于将传统的交通工程方法与最新的AI技术相结合,实现了一个具有自我学习和适应能力的智能交通管理系统。
|
网络安全 iOS开发 开发者
frida环境配置、以及如何脱壳iOS包并安装到非越狱设备-制作iOS任意App分身
frida环境配置、以及如何脱壳iOS包并安装到非越狱设备-制作iOS任意App分身
2749 1