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);
}
}