每日一练Day12

一. 单选

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 所有选项都不是

答案

B

解析:B 选项的参数个数、参数类型和 add 方法重合


2. 在Java中,关于HashMap类的描述,以下错误的是

A HashMap 使用键/值得形式保存数据

B HashMap 能够保证其中元素的顺序

C HashMap 允许将null用作键

D HashMap 允许将null用作值

答案

B

解析:

  • HashMap 不是有序的,TreeMap 和 LinkedHashMap 是有序的
  • HahTable 对象的 key、value 值均不可为 null

3. 在Java中,( )类提供定位本地文件系统,对文件或目录及其属性进行基本操作

A FileInputStream

B FileReader

C FileWriter

D File

答案

D

解析:

FileInputStream 提供了对文件的字节读取;
FileReader 提供了对文件的字符读取;
FileWriter 提供了对文件的字符写入;
File 提供了对文件的基本操作,包括对删除,文件路径等操作。


4. 下面程序的运行结果是

String str1 = "hello"; 
String str2 = "he" + new String("llo"); 
System.err.println(str1 == str2);

A true

B false

C exception

D 无输出

答案

B

解析:

  • String str1 = "hello"; 会在字符串常量池中创建 "hello"
  • new String("llo") 如果字符串中没有 "llo",那么它将首先在字符串常量池中创建,然后在堆空间中创建,因此将创建总共 2 个字符串对象
  • 对于引用数据类型来说,== 比较的是对象的内存地址。

5. 下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?

A private

B 无修饰符

C public

D protected

答案

B

解析:

  • public:公共访问级别,表示该成员可以被任何类访问。
  • protected:受保护访问级别,表示该成员可以被同一个包中的类和子类访问。
  • 默认(无修饰符):默认访问级别,表示该成员可以被同一个包中的类访问。
  • private:私有访问级别,表示该成员只能被其定义所在的类访问

6. java接口的方法修饰符可以为?(忽略内部接口)

A private

B protected

C final

D abstract

答案

D

解析:接口的方法默认是public abstract;


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!

D FileNotFoundException!IOException!Exception!

答案

A

解析:只能 catch 一种错误


8. 下列哪种异常是检查型异常,需要在编写程序时声明?

A NullPointerException

B ClassCastException

C FileNotFoundException

D IndexOutOfBoundsException

答案

C

解析:

  • NullPointerException 空指针异常
  • ClassCastException 类型转换异常
  • IndexOutOfBoundsException 索引超出边界的异常

以上这些异常都是程序在运行时发生的异常,所以不需要在编写程序时声明


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() {}

答案

A

解析:

B 抽象类中变量可以初始化或不初始化,但不能初始化后在抽象类中重新赋值或操作该变量(只能在 子类中改变该变量),所以错误。

C 既不是一个成员方法,成员方法需要方法体,也不是一个抽象方法,抽象方法得申明需要关键字 abstrac,所以 错误。

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

解析:byte 的取值范围 -128 ~ 127,++a 是先加再传值,127+1 会导致越界,127 的二进制为 0111 1111,加 1 后为 1000 0000,是一个负数,计算机用补码表示负数,则对应的十进制就是 -128;add(b),值传递,传递的是 b 的副本,不会改变真实 b 的值。

二. 编程

1. 完善核心代码 标题:二进制插入 | 时间限制:3秒 | 内存限制:32768K | 语言限制:[Python, C++, C#, Java]

给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。

测试样例:

1024,19,2,6

返回:1100

答案

                       j       i

n 1024:10000000000

m 19:           10011

结果:    10001001100 = 1100

import java.util.*;

public class BinInsert {
    public int binInsert(int n, int m, int j, int i) {
        // write code here
        return n | (m << j);
    }
}

2. ACM编程题 标题:查找组成一个偶数最接近的两个素数 | 时间限制:1秒 | 内存限制:32768K

任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。

数据范围:输入的数据满足

输入描述:

输入一个大于2的偶数

输出描述:

从小到大输出两个素数

示例1:

输入

20

输出

7

13

答案

首先两个加数越靠近差值就越小,因此我们可以从 n/2 开始,找到第一对都是素数的加数,直接输出即可,因为一定存在,因此不用遍历完整个数组。

检查一个数是否是素数时,我们也可以只检查到√n,因为大于√n的因子势必要与一个小于√n的因子相乘,而小于等于√n的因子检查完之后,就不会有大于√n的因子。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int a = in.nextInt();
            solution(a);
        }
    }
    private static void solution(int num) {
        // 从最接近的两个中位数开始处理判断
        for (int i = num / 2; i < num - 1; i++) {
            if (isPrime(i) && isPrime(num - i)) {
                System.out.println((num - i) + "\n" + i);
                return;
            }
        }
    }
    // 判断是否素数
    private static boolean isPrime(int num) {
        for(int i = 2; i <= Math.sqrt(num); i++) {
            if(num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

你可能感兴趣的:(java,开发语言,算法)