【笔试训练】排序子序列和倒置字符串

目录

一、选择题

二、倒置字符串


一、选择题

一、A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:

1. A a0=new A();

2. A a1=new B();

3. A a2=new C();

问以下哪个说法是正确的(D

A. 只有第一行能通过编译

B. 第1、2行能通过编译,但第3行编译出错

C. 第1、2、3行能通过编译,但第2、3行运行时出错

D. 第1行,第2行和第3行的声明都是正确的


答案:选D

【笔试训练】排序子序列和倒置字符串_第1张图片

 因为B继承自A,C继承自B,也可以认为C继承了A。相当于你爸爸继承了你爷爷的一些特点,而你继承了你爸爸的特点,间接的你也继承了你爷爷的特点。

二、下面代码将输出什么内容:(B

public class SystemUtil{
     public static boolean isAdmin(String userId){
         return userId.toLowerCase()=="admin";
     }
     public static void main(String[] args){
         System.out.println(isAdmin("Admin"));
     }
}

 A. true    B. false     C. 1     D. 编译错误 


答案:B

字符串是一个引用类型,所以比较两个字符串是否相等需要使用equals方法,这里使用==比较,比较的是两个字符串的地址。

三、 阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有(D

package NowCoder;
class Test {
     public static void hello() {
         System.out.println("hello");
    }
}
public class MyApplication {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test test=null;
        test.hello();
    }
}

A. 能编译通过,并正确运行

B. 因为使用了未初始化的变量,所以不能编译通过

C. 以错误的方式访问了静态方法

D. 能编译通过,但因变量为null,不能正常运行


答案:D

这里是因为hello是属于类的方法,不能借助对象来调用,但是这个引用指向的对象为null,

所以这里test调用hello方法,是可以执行的,并没有借助对象来调用。

四、下列哪一种叙述是正确的(D

A. abstract修饰符可修饰字段、方法和类

B. 抽象方法的body部分必须用一对大括号{ }包住

C. 声明抽象方法,大括号可有可无

D. 声明抽象方法不可写出大括号


答案:D

abstract可以修饰类和方法,但是不能修饰成员变量。

声明抽象方法,有访问限定修饰符、返回值类型、方法名,但是不能有方法体,也就是{}。

五、如下代码的执行结果是什么(B

class Base {
     Base() {
         System.out.print("Base"); 
     }
}
public class Alpha extends Base {
     public static void main( String[] args ) {
         new Alpha();
         //调用父类无参的构造方法
         new Base();
     } 
}

 A. Base    B. BaseBase     C. 编译失败      D. 代码运行但没有输出     E. 运行时抛出异常


答案B

因为在创建子类继承父类的时候,即使子类中没有写构造方法,在创建子类对象的时候,调用的无参构造方法,也会首先调用父类的构造方法,先执行父类的构造方法,然后再执行子类的构造方法。

六、如下代码的执行结果是什么(D

public class Test { 
     public int aMethod(){
         static int i = 0;
         i++; 
         return i;
     } 
    public static void main(String args[]){
         Test test = new Test(); 
         test.aMethod(); 
         int j = test.aMethod();
         System.out.println(j);
     } 
}

A. 0       B. 1       C. 2        D. 编译失败 


答案:D

静态的变量只能再类中,或者静态方法、或者静态代码块中定义,不能再非静态的方法或者代码块中定义,因为静态的变量属于类,而给静态的方法和代码块通过实例化对象,就会属于某个对象。

二、倒置字符串

【笔试训练】排序子序列和倒置字符串_第2张图片

 【解题思路】:这里我们将输入的字符串转换成字符数组,然后整体将字符数组中的元素逆置,然后再将每个单词进行逆置,这样就得到了一个逆置之后的字符串。

【笔试训练】排序子序列和倒置字符串_第3张图片

public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        char[] ch = str.toCharArray();
        int let = ch.length;
        //将整体的字符串进行逆置
        func(ch,0,let-1);

        int i = 0;
        while(i < let){
              int j = i;//i用来遍历数组中的单词
            //当j小于数组长度并且j指向的位置不是空格,则向前挪动一位。
            while(j < let && ch[j]!= ' '){
                j++;
            }
            //当j没有走到数组末尾之后,则对空格之前的单词进行逆置
            if(j < let){
                func(ch,i,j-1);
                i = j+1;
            }else{
                //如果j走到最后数组最后一个元素之后,则表示这个数组中每个单词已经逆置完了,将i和j放在同一个位置,用i作为循环结束条件。
                func(ch,i,j-1);
                i = j;
            }
        }
        String string = new String(ch);
        System.out.println(string);
    }
    public static void func(char[] array,int start,int end){
        while(end>start){
            char tmp = array[start];
            array[start] = array[end];
            array[end] = tmp;
            //两个指针移动到下一个需要交换的位置,进行下一组交换。
            start++;
            end--;
        }
    }
}

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