【笔试训练】统计回文

一、单选

1、以下代码结果是什么()

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

引用类型的传参传递的是地址。所以上述代码中的operate方法中给x拼接一个y的值,那么a的值就是AB,将x赋值给y表示的是将对象地址传给了y,y=x表示的是让y指向了其他对象。所以b的值没有变化,所以最终结果为AB.B

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

A. this.A(x)    B. this(x)     C. super(x)    D. A(x)


答案:B

this.只能是类中的普通方法和属性,不能是构造方法,想要在类A的其他构造方法中调用这个构造方法使用的是this(x).

3、下面代码的运行结果是()

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变量由于是在方法中,所以他是一个局部变量,Java中想要使用局部变量,就必须先给变量初始化。

4、以下代码的返回值是()

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

     }finally{
         return false;
     }
}

A. true           B. false


答案:B

按照我们正常的思维程序遇到return就结束了,但是由于是try-catch,finally是一定会被执行的,最后执行的是finally中的代码,所以程序的输出结果为false.

5、指出以下程序运行的结果是

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方法中对对象的值做出的改变,会影响到方法外部的对象,但是change方法中str对象表示的意思为修改了形参str的执行,而不是修改对象中的值,并没有改变外部str的值。ch数组中将0下标位置的值修改为g,所以程序的最终输出结果为good and gbc.

二、多选 

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

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

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

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

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


答案:ABD

final修饰方法表示这个方法不能被重写,而不是被继承。

三、 统计回文

题目描述

【笔试训练】统计回文_第1张图片

 题目解析【笔试训练】统计回文_第2张图片

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       Scanner scan = new Scanner(System.in);
       String str1 = scan.nextLine();
       String str2 = scan.nextLine();
       //1、向str1中插入字符串str2。但是不能直接在str1字符串中插入,会导致str1发生改变
        //我们需要创建一个变量,使这个变量等于str1的值,对这个变量中的值进行修改
        int count = 0;
        //这里i能够等于str1的长度,是因为插入元素的时候,也可以插入到字符串的末尾
        for (int i = 0; i <= str1.length(); i++) {
            StringBuffer str3 = new StringBuffer(str1);
            str3.insert(i,str2);
            //2、逆置字符串str3
            StringBuffer str4 = new StringBuffer(str3);
            str4.reverse();
            //3、判断逆置前后字符串是否相同
            if(str4.toString().equals(str3.toString())){
                count++;
            }
        }
        System.out.println(count);
    }
}

 代码讲解:

  • 第一次创建StringBuffer对象是因为要创建一个新的对象,对新的对象进行操作,如果使用String来创建一个变量指向str1的话,只是将str1的地址传给了它,修改的对象还是str1所指向的对象。
  • 第二此创建新的StringBuffer对象是因为reverse方法操作的是,调用它的对象,不会返回新的对象,我们需要将逆置的对象的值与没有逆置的进行对比,判断是否为回文串。
  • 第3步时判断两个字符串是否相等,为什么不直接使用equals进行比较,还要调用toString方法。这是因为StringBuffer类中没有equals方法,我们需要使用toString方法将StringBuffer类型的对象转换成String类型的对象。

【笔试训练】统计回文_第3张图片 

【笔试训练】统计回文_第4张图片 

 


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