📩很多朋友都问我学完基础知识以后怎样提高编程水平?当然是刷题啦!很多小伙伴都在纠结从哪里开始,今天给大家推荐一个身边朋友都在使用的刷题网站:点击进入牛客网刷题吧! 各大互联网大厂面试真题,成体系的分类题库,从入门到进阶,分类练习哦!
文章目录
- 🌕前言
- 第一题:补全构造方法
-
- 🍂题目描述
- 🍃示例
- 🍃题解
- 第二题:重写计算逻辑
-
- 🍂题目描述
- 🍃示例
- 🍃题解
- 第三题
-
- 🍂题目描述
- 🍃示例
- 🍃题解
- 第四题:类型判断
-
- 🍂题目描述
- 🍃示例
- 🍃题解
- 第五题:实现抽象方法
-
- 🍂题目描述
- 🍃示例
- 🍃题解
🌕前言
📩Java基础学习主要以练习为主,很多朋友听完视频课程学会基础以后感觉对练手项目无从下手,这里推荐去牛客网看看,这里的IT题库内容很丰富,属于国内做的很好的IT学习网站,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!
📩从基础开始练习,知识点编排详细,题目安排合理,题目表述以指导的形式进行。整个题单覆盖了java入门的全部知识点以及全部语法,通过知识点分类逐层递进,从基础开始到最后的实践任务,都会非常详细地指导你应该使用什么函数,应该怎么输入输出。
📩牛客网还提供题解专区和讨论区会有大神提供题解思路,对新手玩家及其友好,有不清楚的语法,不理解的地方,看看别人的思路,别人的代码,也许就能豁然开朗。快来点击链接开始刷题吧:牛客网刷题进阶!
第一题:补全构造方法
🍂题目描述
有父类Base,内部定义了x、y属性。有子类Sub,继承自父类Base。子类新增了一个z属性,并且定义了calculate方法,在此方法内计算了父类和子类中x、y、z属性三者的乘积。请补全子类构造方法的初始化逻辑,使得该计算逻辑能够正确执行。
输入描述:
三个整数:x, y, z
输出描述:
三个整数的乘积:xyz
🍃示例
输入:1 2 3
输出:6
🍃题解
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();
}
}
第二题:重写计算逻辑
🍂题目描述
在父类Base中定义了计算方法calculate(),该方法用于计算两个数的乘积(X*Y)。请在子类Sub中重写该方法,将计算逻辑由乘法改为除法(X/Y)。注意,当分母为0时输出“Error”。
输入描述:
两个整数
输出描述:
两个整数的商(int类型,不考虑小数情况)
🍃示例
输入:6 2
输出:3
输入:1 0
输出:Error
🍃题解
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) //除数为0
System.out.println("Error");
else
System.out.println(getX() / getY());
}
}
第三题
🍂题目描述
已知有三个类:First、Second、Third。要求定义一个打印方法,支持传入任意引用类型的参数(包括上述三个类),并在方法内部打印出对象的字符串形式。
输入描述:
类名
输出描述:
由该类实例化出来的对象的字符串表示
🍃示例
输入:First
输出:First
🍃题解
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......
// 多态性,是子类的对象赋给了父类的引用,使用的前提是有继承关系、有方法的重写
// 本题中的三个类都重写了toString()方法
// 那么很显然,需要找到一个类,是本题中三个类的共同父类,又有toString()方法
// 并且有forName()方法和newInstance()方法,以便在第10行的print()中能传入一个对象
// 不用想了,平时就是用 Object类,它是所有类的父类,又拥有各种各样的方法
// 找到该类以后,把这个类的对象作为参数传给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";
}
}
第四题:类型判断
🍂题目描述
父类Base有两个子类:Sub1、Sub2,现有一个方法getClassName(),要求传入Base类型的实例,在方法内部判定其具体的类型,返回的是类型的简单名字(不含包名),请补全getClassName()方法的判断逻辑。
输入描述:
输入要实例化的类名:Base、Sub1、Sub2 三者之一。
输出描述:
返回实例的实际类名(简化类名,不包含包的名字)。
🍃示例
输入: Sub1
输出: Sub1
输入: Sub2
输出: Sub2
输入: Base
输出: Base
🍃题解
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) {
return obj.getClass().getName(); //直接返回
}
}
class Base {
}
class Sub1 extends Base {
}
class Sub2 extends Base {
}
第五题:实现抽象方法
🍂题目描述
已知抽象类Base中定义了calculate方法,该方法的计算过程依赖于sum()和avg(),而后两个方法均为抽象方法。要求定义Base的子类Sub类,并实现父类的抽象方法,使得main函数中的运算逻辑得以正确执行。
输入描述:
两个整数
输出描述:
两个整数的和除以两个整数的平均值(平均值为int类型,不考虑小数问题)
🍃示例
输入: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 {
//write your code here......
public int sum() {
return super.getX() + super.getY();
}
public int avg() {
return sum() / 2;
}
}
天道酬勤,快来加入和小伙伴一起刷题吧!