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