java 每日一练 (5)

本文介绍了Java编程的基础知识,包括位运算、字符串操作、构造函数、异常处理和编程题目解析。讲解了右移运算符的使用,构造方法的调用,异常处理中的finally块,以及如何判断回文字符串和求连续子数组最大和的问题。同时,文章还讨论了Java中标识符的合法性,并提供了多选题和编程题的解答。
摘要由CSDN通过智能技术生成

java 每日一练(5)

单选


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

在这里插入图片描述


A: 0

B : 2

C: 5

D :80


5的二进制 : 0101

右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)


0101>> 2 , 5为 正数 左侧补0

第一次 : 0010

第二次 : 0001

此时 x 就为 1

然后 y 再 >>> 也称 无符号右移。

无符号右移规则:最右侧位不要了, 最左侧补 0.


此时 0001 >>> 2 第一次 0000 , 第二次 0000

所以答案很明显就是 0

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


在这里插入图片描述


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

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

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

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


图解 :

在这里插入图片描述


所以答案 很明显 C


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

A this.A(x)

B this(x)

C super(x)

D A(x)


题目给了 A 是有构造方法 A(int a) ,说明是带有一个参数的构造方法, 这里我们想要通过 this 调用带有一个参数的构造方法, 直接使用 this(x) 即可 ,

这里需要注意this() ,需要在构造方法的第一行 .


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

这里放在 idea上就非常明显了

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


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

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

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

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


答案 : 局部变量 s 并没有初始化,所以这里 编译期间 就会出错 。 所以选C

放在 idea 上 , 就非常明显了, 直接爆红 了。

在这里插入图片描述


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


A int型

B 枚举类型

C 字符串

D 浮点型

答案 : D ,这里我们直接特殊记忆一下即可, 不能作为 switch() 的参数 类型有 float , double , boolean , long


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


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

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

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

D 可以包含任意类


A : 错误 ,我们的一个.java文件可以包含很多类,并不一定需要与文件名相同 ,只有public修饰的类与文件名相同

在这里插入图片描述


B : 上图 A 和 B 就不是内部类, 同样也是可以包含的, 所以 B也是错误的

C :正确

D :错误 , 我们的 public 修饰的类只能包含一个,所以这里错误 .

7.以下代码返回值是什么?


在这里插入图片描述


A true B false


这里主要考察 异常中 finally 不管是否出现异常都会执行 , 一开始 返回 一个 true , 但是 需要执行 finally中的代码, 所以 又执行了一个 return false ,此时最终就返回了 一个 false


答案 : B


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


A STRING

B x3x

C void

D deSf


答案 : java中标识符 是 数字 字母 下划线 美元符号$ , 这里 void 是一个关键字, 就不能使用void 来定义一个变量 ,方法等 所以选 C


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

在这里插入图片描述


A good and abc

B good and gbc

C test ok and abc

D test ok and gbc


答案 : 这里还是考引用 ,与上面的 那个 a 和 b 的差不多 .

在这里插入图片描述

不定项选择题

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


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

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

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

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

答案 :

A 正确 如果不知道可以 取看异常相关的文章 ,

B 正确

在这里插入图片描述


C : final 这里是方法的不可重写, 类才能继承 所以 C 错误


D : 这里就明确的抛出了一个异常 。 注 : 这里随便写的.

在这里插入图片描述

编程题


题目一 : 统计回文_牛客题霸_牛客网 (nowcoder.com)


图一 :

在这里插入图片描述

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        String str2 = sc.next();
        int n = str1.length();

        int count = 0;
        for (int i = 0; i <= n; i++) {
            StringBuilder ret = new StringBuilder();
            ret.append(str1.substring(0, i)).append(str2).append(str1.substring(i, n));
            if (sum(ret.toString().toCharArray(), 0, ret.length() - 1)) {
                count++;
            }
        }
        System.out.println(count);
    }

    public static boolean sum(char[] a, int start, int end) {
        // 单独写一个方法判断是否为回文
        while (start < end) {
            if (a[start] != a[end]) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}


最后注意一下 ,因为我们的substring(a,b) 的 截取是 左闭右开的所以最后 需要让 i = n ,才能截取完全 ,此时就相当于最后添加 字符串 b 。


如果对 substring() 截取方法不熟悉, 这可以采用 insert() 方法 ,直接将我们的字符串插入到 字符串 中 然后再判断是否为回文 .

注意 : insert 方法在 StringBuilder 或 StringBuffer 中, String 类里面没有的.


所以代码如下 :

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        String str2 = sc.next();
        int n = str1.length();

        int count = 0;
        for (int i = 0; i <= n; i++) {
            StringBuilder str = new StringBuilder(str1);
            str.insert(i, str2);
            if (sum(str.toString().toCharArray(), 0, str.length() - 1)) {
                count++;
            }

        }
        System.out.println(count);
    }

    public static boolean sum(char[] a, int start, int end) {
        // 单独写一个方法判断是否为回文
        while (start < end) {
            if (a[start] != a[end]) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}

题目二 : 连续最大和_牛客题霸_牛客网 (nowcoder.com)

图一 :

在这里插入图片描述

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();

        int[] arr = new int[n];
        for(int i = 0 ; i < n;i++){
            arr[i] = in.nextInt();
        }

        int count = arr[0];
        
        int max = arr[0];
        for(int i = 1 ;i < n ;i++){
            // 动态规划 : 状态方程 
            count = Math.max(arr[i], count+arr[i]);
            // 与之前的最大值比较,如果 大就重新赋值给 max 
            max = Math.max(count, max);
        }
        System.out.print(max);
    }
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值