目录
一、单选题
二、多选题
三、编程题
3.1不要二
3.2 把字符串转成整数
一、单选题
1.下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
A dst=String.frombytes(src,”GBK”).getbytes(“UTF-8”)
B dst=new String (src,”GBK”).getbytes(“UTF-8”)
C dst=new String (”GBK”, src,) getbytes()
D dst=String.encode(String.decode(src,”GBK”)), “UTF-8”)
操作步骤就是先解码再编码用new String(src,"GBK")解码得到字符串,再用getBytes("UTF-8")得到UTF8编码字节数组。
所以正确答案是 B
2.Java中的集合类包括ArrayList、LinkedList、HashMap等,下列关于集合类描述错误的是?
A ArrayList和LinkedList均实现了List接口
B ArrayList的访问速度比LinkedList快
C 随机添加和删除元素时,ArrayList的表现更佳
D HashMap实现Map接口,它允许任何类型的键和值对象
ArrayList和LinkedList均实现了List接口,ArrayList的访问速度比LinkedList快直接根据下标找出对应值即可,而后者需要遍历。随机添加和删除元素时,ArrayList的表现不是更佳的因为他需要扩容或者后移前移。HashMap实现Map接口,它允许任何类型的键和值对象,null值也可以作为键和值。
所以正确答案是 C
3.下列哪个对访问修饰符作用范围由大到小排列是正确的?
A private>default>protected>public
B public>default>protected>private
C private>protected>default>public
D public>protected>default>private
private(私有权限,类内部权限)<default(包访问权限,包内部可见)<protected(继承权限)<public(公开的,所有对象可见)
所以正确答案是 D
4.在Java中,HashMap中是用哪些方法来解决哈希冲突的?
A 开放地址法
B 二次哈希法
C 链地址法
D 建立一个公共溢出区
在Java中,HashMap中是用链地址法来解决哈希冲突的
所以正确答案是 C
5.阅读下列程序,选择哪一个是正确的输出结果
class HelloA{
public HelloA() {
System.out.println("I’m A class ");
}
static {
System.out.println("static A");
}
}
public class HelloB extends HelloA{
public HelloB() {
System.out.println("I’m B class");
}
static{
System.out.println("static B");
}
public static void main (String[] args){
new HelloB();
}
}
A static A I’m A class static B I’m B class
B I’m A class I’m B class static A static B
C static A static B I’m A class I’m B class
D I’m A class static A I’m B class static B
如果一个类B继承了另一个类A,则B称为派生类,A类为基类。
对象创建时代码的加载顺序为:静态代码 --> 非静态代码 --> 构造方法。
若继承了父类,则加载顺序为:父类的静态的代码 --> 子类的静态的代码 --> 父类内部非静态代码 --> 父类的构造方法 --> 子类的非静态代码 --> 子类的构造方法。
所以本题顺序是A类的静态的代码 --> B类的静态的代码 -->A类的构造方法 --> B类的构造方法。
所以正确答案是 C
6.执行下列代码的输出结果是( )
public class Demo{
public static void main(String args[]){
int num = 10;
System.out.println(test(num));
}
public static int test(int b){
try
{
b += 10;
return b;
}
catch(RuntimeException e)
{
}
catch(Exception e2)
{
}
finally
{
b += 10;
return b;
}
}
}
A 10
B 20
C 30
D 40
调用方法后进入try代码块会执行b为20,然后不论异常有没有被捕捉都会进行finally代码块所以最终b为30
所以正确答案是 C
7.下列代码的输出结果是_____
boolean b=true?false:true==true?false:true;
System.out.println(b);
A true
B false
C null
D 空字符串
三目运算符的语法规则:条件表达式1?表达式2:表达式3
根据布尔表达式1的返回值,返回true则取布尔表达式2的值,返回false则取表达式3的值。
所以正确答案是 B
二、多选题
8.在Java中下面Class的声明哪些是错误的?
A public abstract final class Test { abstract void method(); }
B public abstract class Test { abstract final void method(); }
C public abstract class Test { abstract void method() { } }
D public class Test { final void method() { } }
抽象类是不能由final修饰,因为他需要被继承然后具体实现方法。抽象类中的抽象方法是不能用final修饰的,并且抽象方法不能有具体的实现不能有{},正常类中可以有final方法。
所以正确答案是 A、B、C
9.下列关于构造方法的叙述中,错误的是()
A java语言规定构造方法名与类名必须相同
B java语言规定构造方法没有返回值,但不同void声明
C java语言规定构造方法不可以重载
D java语言规定构造方法只能通过new自动调用
java中构造方法名与类名必须相同并且构造方法没有返回值,但不同void声明。java中构造法方式可以重载的,可以有很多不同形参的构造方法,可以无参也可以有参。构造方法只要在创建对象时就会被调用,不只有new。
所以正确答案是 C、D
10.下面哪些赋值语句是正确的()
A long test=012
B float f=-412
C int other =(int)true
D double d=0x12345678 E byte b=128
true是Boolean类型的,不可以转为int类型。
long test = 012为八进制整型,float f = -412为自动转 -412.0f 单精度浮点数。 double d = 0x12345678为十六进制整数自动转双精度浮点数。
所以正确答案是 A、B、D
三、编程题
3.1不要二
二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根 小易想知道最多可以放多少块蛋糕在网格盒子里
创建一个二维数组int[][] num = new int[w][h],不进行初始化一开始的时候每个位置都是0,直接从第一个位置num[0][0]开始遍历,如果num[i][j]==0那么使num[i+2][j]和num[i][j+2]位置的数值改为-1(在i+2和j+2位置合法的情况下)然后继续遍历,有一个满足条件则count++。最后循环结束得到的count就是最多放置蛋糕的数额。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int w = sc.nextInt();
int h = sc.nextInt();
int[][] num = new int[w][h];
int count = 0;
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
if(num[i][j]==0){
count++;
if(i+2<w){
num[i+2][j] = -1;
}
if(j+2<h){
num[i][j+2] = -1;
}
}
}
}
System.out.println(count);
}
3.2 把字符串转成整数
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
直接进入循环遍历整个数组,从最后一个位置开始遍历然后判断他是是否是数字,如果是数字称上位数,然后然后判断是否是+或者-号,-号需要取反。
public int StrToInt(String str) {
int num = 0;
int k = 1;
for (int i = str.length()-1; i >= 0; i--) {
int a= str.charAt(i);
if(a<='9'&&a>='0'){
a -= 48;
num += (a*k);
k = k*10;
} else if(str.charAt(i)=='-'){
num = -num;
}else if(str.charAt(i)=='+'){
num = num;
}else{
return 0;
}
}
return num;
}