一、选择题
1、以下方法,哪个不是对add方法的重载?
public class Test
{
public void add( int x,int y,int z){}
}
A public int add(int x,int y,float z){return 0;}
B public int add(int x,int y,int z){return 0;}
C public void add(int x,int y){}
D 以上都不是
他的回答: A (错误)
正确答案:B
2、在Java中,关于HashMap类的描述,以下错误的是
A HashMap使用键/值得形式保存数据
B HashMap 能够保证其中元素的顺序
C HashMap允许将null用作键
D HashMap允许将null用作值
他的回答: D (错误)
正确答案: B
3、在Java中,( )类提供定位本地文件系统,对文件或目录及其属性进行基本操作
A FileInputStream
B FileReader
C FileWriter
D File
他的回答: D (正确)
正确答案: D
4、下面程序的运行结果是
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
A true
B false
C exception
D 无输出
他的回答: B (正确)
正确答案: B
5、下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?
A private
B 无修饰符
C public
D protected
他的回答: C (错误)
正确答案: B
6、java接口的方法修饰符可以为?(忽略内部接口)
A private
B protected
C final
D abstract
他的回答: D (正确)
正确答案: D
参考答案:
接口中的方法是需要被这个接口的类实现的。
7、下列程序的运行结果
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
A IOException!
B IOException!Exception!
C FileNotFoundException!IOException!
DFileNotFoundException!IOException!Exception!
他的回答: D (错误)
正确答案: A
参考答案:
只能捕捉一个异常,所以选一个。
8、下列哪种异常是检查型异常,需要在编写程序时声明?
A NullPointerException
B ClassCastException
C FileNotFoundException
D IndexOutOfBoundsException
他的回答: B (错误)
正确答案: C
参考答案:
异常可以分为非检查异常和检查异常:
非检查异常主要包括运行时异常(RuntimeException极其子类)和错误(Error)。编译器不会进行检查并且不要求必须处理的异常,也就说当程序中出现此类
异常时,即使我们没有try-catch
捕获它,也没有使用throws
抛出该异常,编译也会正常通过。
检查异常是除了Error
和 RuntimeException
的其它异常。这是编译器要求必须处理的异常。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行
在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,所以必须处理这些异常。
9、选项中哪一行代码可以添加 到题目中而不产生编译错误?
public abstract class MyClass {
public int constInt = 5;
//add code here
public void method() {
}
}
A public abstract void method(int a);
B constInt = constInt + 5;
C public int method();
D public abstract void anotherMethod() {}
他的回答: B (错误)
正确答案: A
参考答案:
里面缺一个抽象方法,A是抽象方法,D是抽象方法但是有方法体。
10、如下代码,执行test()函数后,屏幕打印结果为()
public class Test2
{
public void add(Byte b)
{
b = b++;
}
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + " ");
add(b);
System.out.print(b + "");
}
}
A 127 127
B 128 127
C 129 128
D 其他选项都不对
他的回答: D (正确)
正确答案: D
参考答案:
包装类的值是final修饰不可变的,无论是++b还是b++都创建了一个新对象,那么作为参数传递时,形参和实参不会指向一个地址。也就是说,即使add() 方法中不是 b = b++;这样没有意义的代码,传入参数的值也不会改变。
byte类型取值范围为-128~127,在a变量进行++a运算时,会导致a变为-128,这是因为整数在内存中使用的是补码的形式表示,最高位是符号位,0表示正数,1表示负数,加一导致补码进位,符号位变为1. 因此,本题正确输出为-128 127,答案选择
二、编程题
【二进制插入】
给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制
的位数从0开始由低到高。
测试样例:
1024,19,2,6
返回:1100
【解题思路】:
i j
n:1024:100000000 00 m:19 : 10011 要把n的二进制值插入m的第j位到第i位,只需要把n先左移j位,然后再进行或运算(|)即可。
n: 10000000000
m: 00001001100
10001001100
牛客网核心代码模式
import java.util.*;
public class BinInsert {
public int binInsert(int n, int m, int j, int i) {
m<<=j;
return m|n;
}
}
【查找组成一个偶数最接近的两个素数】
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
数据范围:输入的数据满足
输入描述:
输入一个大于2的偶数
输出描述:
从小到大输出两个素数
示例1:
输入
20
输出
7
13
【解题思路】:
本题首先需要判断素数,素数表示除过1和本身,不能被其它数整除。通过循环遍历来判断一个数是否为素数。最近的两个素数应该从最中间的位置开始向两边查找。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int n=sc.nextInt();
int mid=n/2;
for(int i=mid;i>0;i--){
if(isPrime(i)&&isPrime(n-i)){
System.out.println(i);
System.out.println(n-i);
break;
}
}
}
}
public static boolean isPrime(int m){
for(int i=2;i*i<=m;i++){
if(m%i==0){
return false;
}
}
return true;
}
}