每日一练Day5

一. 单选

1. 下面的程序 编译运行后,在屏幕上显示的结果是()

public class Test {
public static void main(String args[]) {
int x, y;
x = 5 >> 2;
y = x >>> 2;
System.out.println(y);
}
}

A 0

B 2

C 5

D 80

答案

A

  • 有符号右移位>>,使用符号扩展:若符号为正,则在高位插入0;若符号为负,则在高位插入1
  • 无符号右移位>>>,使用零扩展:无论正负,都在高位插入0

2. 以下代码结果是什么?

public class foo {
    public static void main(String sgf[]) {
        StringBuffer a=new StringBuffer("A");
        StringBuffer b=new StringBuffer("B");
        operate(a,b);
        System.out.println(a+"."+b);
    }
    static void operate(StringBuffer x,StringBuffer y) {
        x.append(y);
        y=x;
    }
}

A 代码可以编译运行,输出“AB.AB”。

B 代码可以编译运行,输出“A.A”。

C 代码可以编译运行,输出“AB.B”。

D 代码可以编译运行,输出“A.B”。

答案

C

解析:

Java 的值传递,当一个变量被传递给一个方法时,实际上传递的是该变量的一个副本,而不是变量本身。因此,如果在方法中修改了参数的值,那么这个修改不会影响到原始变量的值


3. 在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()

A this.A(x)

B this(x)

C super(x)

D A(x)

答案

B

A 选项是调用普通方法的格式 

B this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);
C 选项super(x)为调用父类构造方法的格式;
D A(a)这种形式是在new一个类时使用(调用静态方法的格式)


4. 下面代码的运行结果是()

public static void main(String[] args){
String s;
System.out.println("s="+s);
}

A 代码编程成功,并输出”s=”

B 代码编译成功,并输出”s=null”

C 由于String s没有初始化,代码不能编译通过。

D 代码编译成功,但捕获到NullPointException异常

答案

C

原因是s是在方法中定义的变量,没有初始值,即使用之前必须先给值,要不就报错。
如果变量s在类中方法外定义有默认值null,就不会报错


5. 在java7中,下列不能做switch()的参数类型是?

A int型

B 枚举类型

C 字符串

D 浮点型

答案

D


6. 一个以”.java”为后缀的源文件

A 只能包含一个类,类名必须与文件名相同

B 只能包含与文件名相同的类以及其中的内部类

C 只能有一个与文件名相同的public类,可以包含其他类

D 可以包含任意类

答案

C

只能有一个和文件名相同的 public 类


7.

public boolean returnTest()
{
    try
        {
            return true;
        }
    catch (Exception e)
        {
        }
    finally
        {
            return false;
        }
}

以上代码返回值是什么?

A true

B false

答案

B

解析:如果try,finally语句里均有return,忽略try的return,而使用finally的return.


8. 以下()不是合法的标识符?

A STRING

B x3x

C void

D deSf

答案

C

解析:void 为 java 中的关键字


9. 指出以下程序运行的结果是

public class Example{
    String str=new String("good");
    char[]ch={'a','b','c'};
    public static void main(String args[]){
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
        //引用类型变量,传递的是地址,属于引用传递。
        str="test ok";
        ch[0]='g';
    }

A good and abc

B good and gbc

C test ok and abc

D test ok and gbc

答案

B

解析:在 change 方法中,对 str 进行了重新赋值,但是由于 java 中的字符串是不可变的,所有实际上并没有改变原来的字符串。对 ch (基本类型)数组进行了修改,实参也被影响


二. 不定项选择

1. 下列有关JAVA异常处理的叙述中正确的是()

A finally是为确保一段代码不管是否捕获异常都会被执行的一段代码

B throws是用来声明一个成员方法可能抛出的各种非运行异常情况

C final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承

D throw是用来明确地抛出一个异常情况

答案

A B D

解析:C final 修饰的方法不能被覆盖(重写)


三. 编程

1. ACM编程题 标题:统计回文 | 时间限制:1秒 | 内存限制:32768K

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。

例如:

A = “aba”,B = “b”。这里有4种把B插入A的办法:

* 在A的第一个字母之前: "baba" 不是回文

* 在第一个字母‘a’之后: "abba" 是回文

* 在字母‘b’之后: "abba" 是回文

* 在第二个字母'a'之后 "abab" 不是回文

所以满足条件的答案为2

输入描述:

每组输入数据共两行。

第一行为字符串A

第二行为字符串B

字符串长度均小于100且只包含小写字母

输出描述:

输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数

示例1:

输入

aba

b

输出

2

答案

方法 1

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        StringBuilder a = new StringBuilder(in.nextLine());
        StringBuilder b = new StringBuilder(in.nextLine());
        int count = 0;
        for(int i = 0;i <= a.length();i++){
            StringBuilder temp = new StringBuilder(a);
            temp.insert(i,b);
            if(compare(temp)){
                count++;
            }
        }
        System.out.print(count);
    }
    //双指针
    public static boolean compare(StringBuilder s){
          int i = 0;
          int j = s.length()-1;
          while(i

方法 2

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        StringBuilder a = new StringBuilder(in.nextLine());
        StringBuilder b = new StringBuilder(in.nextLine());
        int count = 0;
        for(int i = 0;i <= a.length();i++){
            StringBuilder temp = new StringBuilder(a);
            temp.insert(i,b);
            if(compare(temp)){
                count++;
            }
        }
        System.out.print(count);
    }
    public static boolean compare(StringBuilder s){
        /**
         * 这里将StringBuilder转换为String的原因是
         * StringBuilder没有覆盖equals方法,以至于直接使用equals方法时,实际上比较的是内存地址是否相等
         * String覆盖了equals方法
         */
        String s1 = s.toString();
        StringBuilder s2 = s.reverse();
        return s1.equals(s2.toString());
    }
}

2. ACM编程题 标题:连续最大和 | 时间限制:1秒 | 内存限制:32768K

一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3

输入描述:

输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。

输出描述:

所有连续子数组中和最大的值。

示例1:

输入

3

-1 2 1

输出

3

答案

动态规划 (dp 问题), sum 表示 前 n-1 个数的和与 n 比较 ,取大的,如果前 n-1 个数的和为负数,则舍弃前 n-1 个数,从 n 开始重新计数

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] check = new int[n];
        for(int i = 0; i < n; i++) {
            check[i] = in.nextInt();
        } 
        int sum = check[0];
        int max = check[0];
        for(int i = 1;i < n;i++){
            sum = getMax(sum + check[i],check[i]);
            if(sum > max){
                max = sum;
            }
        }
        System.out.print(max);
    }
    public static int getMax(int a,int b){
        return a > b ? a:b;
    }
}

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