JAVA26 实现接口

描述

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

输入描述

两个整数

输出描述

两个整数中的最大值

示例1

输入:

1 3

输出:

3

解答

创建一个类来实现 Comparator 接口,然后重写 max() 方法即可。

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Comparator comparator = new ComparatorImpl();

Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int x = scanner.nextInt();
int y = scanner.nextInt();
System.out.println(comparator.max(x, y));
}
}

}

interface Comparator {
/**
* 返回两个整数中的最大值
*/
int max(int x, int y);
}

class ComparatorImpl implements Comparator {

public int max(int x, int y) {
if (x > y) {
return x;
}
return y;
}
}

JAVA27 重写父类方法

描述

父类 Base 中定义了若干 get 方法,以及一个 sum 方法,sum 方法是对一组数字的求和。请在子类 Sub 中重写 getX() 方法,使得 sum 方法返回结果为 x*10+y

输入描述

整数

输出描述

整数的和

示例1

输入:

1 2

输出:

12

解答

注意观察,在父类中 getY()sum() 方法都是加了 final 关键字的,所以代表我们在继承自父类的子类中都是无法修改这两个方法的。而要实现将 x 增大 10 倍,那么就只能操作 getX() 方法了,在这个方法中将 x 放大 10 倍即可。

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);
System.out.println(sub.sum());
}
}

}

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 final int getY() {
return y;
}

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

}

class Sub extends Base {

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

public int getX() {
return super.getX() * 10;
}
}

JAVA28 创建单例对象

描述

Singleton 类是单例的,每次调用该类的 getInstance() 方法都将得到相同的实例,目前该类中这个方法尚未完成,请将其补充完整,使得 main() 函数中的判断返回真(不考虑线程安全)。

输入描述

输出描述

true

解答

通过观察,我们发现代码中已经有了构造方法,我们只需要补充该类的 getInstance() 方法即可。由于要创建单例对象,所以每次调用 getInstance() 方法时,都应该得到的是同一个 Singleton 类型的实例。此时需要注意,要先对该对象判断是否为 null,是就创建新的,不是则返回当前 instance

public class Main {

public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);
}

}

class Singleton {

private static Singleton instance;

private Singleton() {

}

public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}


}

JAVA29 动态字符串

描述

将一个由英文字母组成的字符串转换成从末尾开始每三个字母用逗号分隔的形式。

输入描述

一个字符串

输出描述

修改后的字符串

示例1

输入:

hellonowcoder

输出:

h,ell,ono,wco,der

解答

要注意一点,实际上 String 是不可变的,所以我们需要先将其转换为可变的 StringBuilder。然后从后往前开始,每三位遍历一次,然后将逗号 , 插入其中,从而得到新的字符串,最后将新的字符串转换为 String 类型即可。注意,要在 StringBuilder 类型的字符串中插入 ,,需要使用到 insert() 方法。

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();

StringBuilder newstr = new StringBuilder(str);
for (int i = str.length() - 3; i >= 0; i -= 3) {
newstr.insert(i, ',');
}
System.out.println(newstr.toString());
}
}

JAVA30 统计字符串中字母出现次数

描述

给定一个字符串,随机输入一个字母,判断该字母在这个字符串中出现的次数

输入描述

任意一个字母

输出描述

字母在字符串中出现次数

示例1

输入:

o

输出:

3

示例2

输入:

a

输出:

0

解答

要统计字符串中某字母出现的次数,那么遍历该字符串,然后利用字母和字符串的每一个字符相比较,如果相同则计数加 1,直到字符串末尾。注意,要获取字符串第 index 位的字符,需要使用 charAt(index) 方法。

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
String string = "H e l l o ! n o w c o d e r";
Scanner scanner = new Scanner(System.in);
String word = scanner.next();
scanner.close();
System.out.println(check(string, word));
}

public static int check(String str, String word) {
char ch = word.charAt(0);
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ch) {
count++;
}
}
return count;
}
}