🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!欢迎志同道合的朋友一起加油喔🤺🤺🤺
目录
一、选择题
二、编程题
🔥最长的数字串
🔥数组中出现次数超过一半的数字
一、选择题
1、以下代码运行输出的是
public class Person{
private String name = "Person";
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();
System.out.println(p.name);
}
}
A 输出:Person
B 没有输出
C 编译出错
D 运行出错
正确答案: C
参考答案:
父类private的成员变量,根据权限修饰符的访问控制范围,只有在类内部才能被访问,就算是他的子类,也不能访问。这里如果将Person p = new Child();改成Person p = new Person();代码依然无法通过编译,因为子类作用域中访问不到父类的私有变量,无法为其生成正确的字节码。另外,一个Java文件中不能有两个public类。
public class Person{//默认的构造方法
private String name = "Person";
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();//父类引用引用子类对象
System.out.println(p.name);//private修饰,只能在类内访问
}
}
2、以下程序的输出结果为
class Base{
public Base(String s){
System.out.print("B");
}
}
public class Derived extends Base{
public Derived (String s) {
System.out.print("D");
}
public static void main(String[] args){
new Derived("C");
}
}
A BD
B DB
C C
D 编译错误
正确答案: D
参考答案:
父类有一个不带参数的构造方法,但是子类没有帮助父类构造,没有super();所以会编译报错
3、下面关于构造方法的说法不正确的是 ()
A 构造方法也属于类的方法,可以创建对象的时候给成员变量赋值
B 构造方法不可以重载
C 构造方法没有返回值
D 构造方法一定要和类名相同
正确答案: B
参考答案:
构造方法名和类名相同,没有返回值
4、在异常处理中,以下描述不正确的有
A try块不可以省略
B 可以使用多重catch块
C finally块可以省略
D catch块和finally块可以同时省略
正确答案: D
参考答案:catch不可以省略,finally可以省略。
5、下列描述中,错误的是
A SQL语言又称为结构化查询语言
B java中”static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问
C 面向对象开发中,引用传递意味着传递的并不是实际的对象,而是对象的引用,因此,外部对引用对象所做的改变不会反映到所引用的对象上
D java是强类型语言,javascript是弱类型语言
E 面向对象的三大特性包括:封装,继承,多态
正确答案: C
参考答案:
静态的直接被类名访问,不需要对象
6、下列哪种说法是正确的?
A 实例方法可直接调用超类的实例方法
B 实例方法可直接调用超类的类方法
C 实例方法可直接调用本类的类方法
D 实例方法可直接调用其他类的实例方法
正确答案: C
参考答案:
实例方法可直接调用超类的实例方法,需要用super;实例方法可直接调用超类的类方法,需要通过类名。
7、有以下代码片段:
String str1="hello";
String str2="he"+ new String("llo");
System.out.println(str1==str2)
请问输出的结果是:
A true
B 都不对
C null
D false
正确答案: D
参考答案:
==比较的是对象地址,String str1=“hello”; 这样创建字符串是存在于常量池中,String str2=new String(“hello”); str2存在于堆中,所以str1和str2指向的并不是同一个对象
8、程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于 10 ,使用 throw 语句显式地引发异常,异常输出信息为 ”something’swrong!” ,语句为()
A if(i>10)throw new Exception(“something’swrong!”);
B if(i>10)throw Exception e(“something’swrong!”);
C if(i>10) throw new Exception e(“something’swrong!”);
D if(i>10)throw Exception( “something’swrong!”);
正确答案: A
9、以下关于集合类 ArrayList 、 LinkedList 、 HashMap 描述错误的是:
A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
B ArrayList和LinkedList均实现了List接口
C 添加和删除元素时,ArrayList的表现更佳
D ArrayList的访问速度比LinkedList快
正确答案: C
参考答案:
ArrayList底层是一个数组 、 LinkedList 底层是一个双向链表、 HashMap是数组和双向链表(还可能变成红黑树)
10、Java程序中的类名称必须与存放该类的文件名相同。
A 对
B 错
正确答案: B
二、编程题
🔥最长的数字串
字符串中找出连续最长的数字串_牛客题霸_牛客网
思路:定义cur和ret,cur保存当前遍历到的字符串,ret保存最长的字符串,遍历str当遇到的字符是数字字符,就将该字符添加到cur中,直到遇到非数字字符停止,比较cur和ret的长度,如果cur的长度大于ret,就让ret引用cur当前所引用的字符串,接着清空cur,继续遍历
结束循环后,还要进行一次比较
代码如下:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
StringBuffer cur=new StringBuffer();
StringBuffer ret=new StringBuffer();
for(int i=0;i<str.length();i++){
if(str.charAt(i)>='0'&& str.charAt(i)<='9'){
cur.append(str.charAt(i));
}else {
if(cur.length()>ret.length()){
ret=cur;
}
cur=new StringBuffer();
}
}
if(cur.length()>ret.length()){
ret=cur;
}
System.out.println(ret.toString());
}
}
🔥数组中出现次数超过一半的数字
数组中出现次数超过一半的数字_牛客题霸_牛客网
思路一:数组排序后,如果符合条件的数存在,则一定是数组中间那个数。这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优;
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
if(array==null||array.length==0){
return 0;
}
int count=0;
Arrays.sort(array);
int mid=array[array.length/2];
for(int i=0;i<array.length;i++){
if(array[i]==mid){
count++;
}
}
if(count>array.length/2){
return mid;
}else{
return 0;
}
}
}
【解题思路2】:
众数:就是出现次数超过数组长度一半的那个数字
如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数。
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
if(array==null||array.length==0){
return 0;
}
int result=array[0];
int times=1;//次数
for(int i=1;i<array.length;i++){
if(times!=0){
if(array[i]!=result){//不相等
--times;
}else{
++times;
}
}else{
result=array[i];
times=1;
}
}
int count=0;
for(int i=0;i<array.length;i++){
++count;
}
if(count>array.length/2){
return result;
}else{
return 0;
}
}
}