下面的程序 编译运行后,在屏幕上显示的结果是()
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
>>>为无符号右移
以下代码结果是什么?
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
引用a指向对象A
引用b指向对象B
引用x指向对象A
引用y指向对象B
在operate方法中,引用x指向的对象A被连接了B,对象A也就被改变为AB
然后又把引用y指向了x所指向的对象地址,也就是此时引用a,x,y指向同一个对象AB
而引用b没有发生任何变化,依旧指向对象B。
在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()
A this.A(x)
B this(x)
C super(x)
D A(x)
他的回答: C (错误)
正确答案: B
this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);
super是调用父类的方法;
A(a)这种形式是在new一个类时使用。
下面代码的运行结果是()
public static void main(String[] args){
String s;
System.out.println("s="+s);
}
A 代码编程成功,并输出”s=”
B 代码编译成功,并输出”s=null”
C 由于String s没有初始化,代码不能编译通过。
D 代码编译成功,但捕获到NullPointException异常
正确答案: C
下列哪个说法是正确的()
A ConcurrentHashMap使用synchronized关键字保证线程安全
B HashMap实现了Collction接口
C Array.asList方法返回java.util.ArrayList对象
D SimpleDateFormat是线程不安全的
正确答案: D
1.虚拟机中没有泛型,只有普通类和普通方法
2.所有泛型类的类型参数在编译时都会被擦除
3.创建泛型对象时请指明类型,让编译器尽早的做参数检查
4.不要忽略编译器的警告信息,那意味着潜在的ClassCastException等着你
Java泛型是使用擦除来实现的,这意味着当你在使用泛型时,任何具体的类型信息都被擦除了,你唯一知道的就是你在使用一个对象。因此List和List在运行时实际上是相同的类型。这两种类型都被擦除成它们的“原生”类型,即List。
【统计回文】“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
例如:
A = “aba”,B = “b”。这里有4种把B插入A的办法:
* 在A的第一个字母之前: "baba" 不是回文
* 在第一个字母‘a’之后: "abba" 是回文
* 在字母‘b’之后: "abba" 是回文
* 在第二个字母'a'之后 "abab" 不是回文
所以满足条件的答案为2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String a = in.nextLine();
String b = in.nextLine();
int cnt = 0;
for(int i = 0; i <= a.length(); i++) {
StringBuilder sb = new StringBuilder();
if (i == 0) {
sb.append(b);
sb.append(a);
} else if(i == a.length()) {
sb.append(a);
sb.append(b);
}else {
sb.append(a.substring(0, i));
sb.append(b);
sb.append(a.substring(i, a.length()));
}
if (helper(sb.toString())) {
cnt ++;
}
}
System.out.println(cnt);
}
public static boolean helper(String str) {
int left = 0;
int right = str.length() - 1;
while(left < right) {
if (str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
先定义一个helper函数判断字符串是否是回文串,然后遍历B插入的A位置,利用String的substring方法进行字符串的拼接,依据helper函数判断拼接的字符串是否为回文串,是则cnt++,遍历完成后打印cnt
【连续最大和】一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
输入描述:
输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。
输出描述:
所有连续子数组中和最大的值。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++){
nums[i] = sc.nextInt();
}
int[] dp = new int[n];
dp[0] = nums[0];
for(int i = 1; i < n; i++) {
dp[i] = Math.max(nums[i],nums[i] + dp[i - 1]);
}
int max = Integer.MIN_VALUE;
for(int num : dp) {
max = Math.max(num,max);
}
System.out.println(max);
}
}
动态规划问题
定义状态数组:dp
初始状态为:dp[0] = nums[0];
状态转移方程:dp[i] = Math.max(nums[i],nums[i] + dp[i - 1]);
遍历状态数组得到和最大连续子数组的值。