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

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


以下java代码运行结果为 下面java代码执行后,结果是_java

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

遍历状态数组得到和最大连续子数组的值。