目录
一,选择题
二,编程题
1.字符串中展出连续最长的的数字串
2.数组中出现次数超过一半的数字
一,选择题
1.
解析:
1)对于父类的成员变量来说是私有的(private),在子类中无法调用
2)在同一个类中不能有两个public修饰的类(内部类除外,内部类是作为外部类的一个成员而存在)
2.
解析:
父类没有无参的构造方法,子类在创建对象时就会默认调用super,调用父类的无参构造方法,所以就会报错
3.
解析:
B.构造方法可以重载,可以有无参的,可以有只有一个参数的,也可以有多个参数的
4.
解析:
D.finally块可以不要即省略,但是catch块不能省略
5.
解析:
关于引用传递,当传递的对象是一个数组时,如果方法体的内容是更改某一个下标当中元素的值,那么就会反映到对象上
6.
解析:
A.实例方法不能直接调用,如果是private就不能调用,这句话太绝对了
B.实例方法只能调用本类的类方法,超类的需要超类来调用
D.同B的分析
7.
解析:
“==”比较的是对象的地址,str1是直接从常量池中取到的,而对于str2,是拼接而来的,只要发生拼接就一定会new一个新的字符串,多以地址肯定不是相同的(堆上)
8.
解析:
抛出异常是要new的,括号中直接输入抛出异常的描述即可
9.
解析:
A.map可以用null作为键,value值也可以为空,当null作为键时,他并不是返回值null的那种意思,他只是一个字符串
B.均实现了list接口
C.ArrayList底层是动态数组,因此,添加和删除都需要移动要添加位置后面的的所有元素,及其不方便,但是查找就非常的方便
D.如果要查找的元素是最后一个元素,其实就没有谁比谁快的说法了
10.
解析:
内部类就不一定是相同的
二,编程题
1.字符串中展出连续最长的的数字串
题目内容:
解析:
1)对于这个字符串来说,首先要做的就是筛选每一段连续的数字串出来
2)我选择将每段数字串选出,并保存好,后面就直接进行长度对比,然后,得到结果字符串
解题代码:
import java.util.*;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);String s = sc.nextLine();List<String> list = new ArrayList<>();StringBuilder sb = new StringBuilder();//循环的作用是遍历整个字符串for(int i = 0;i < s.length();i++){char ch = s.charAt(i);//如果是字符属于0-9之间,sb就直接拼接//如果不是,那么就将这个字符串添加进list保存起来,并且将sb清空if(ch >= '0' && ch <= '9'){sb.append(ch);}else{list.add(sb.toString());sb.delete(0,sb.length());}}list.add(sb.toString());String str = "";//循环遍历整个list,找出数字串当中长度最长的,并赋值给strfor(int i = 0;i < list.size();i++){if(list.get(i).length() > str.length()){str = list.get(i);}}System.out.println(str);}
}
2.数组中出现次数超过一半的数字
题目内容:
解析:
1)直接使用HashMap结构进行保存,以数组元素做键,以出现的次数做值
2)以循环进行对比,找出出现次数超过一半的元素
解题代码:
import java.util.*;public class Solution {public int MoreThanHalfNum_Solution(int [] array) {//用map存放每个元素出现的次数(以元素做键,以出现的次数做值)Map<Integer,Integer> m = new HashMap<>();for(int i = 0;i < array.length;i++){m.put(array[i],m.getOrDefault(array[i],0) + 1);}int midpos = array.length / 2;int index = 0;//对每个元素出现的次数进行比较for(int i = 0;i < array.length;i++){if(m.get(array[i]) > midpos){index = i;}}return array[index];}
}