一、选择题
(1)
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Class c=Class.forName(args[0]);
Method[] m=c.getDeclaredMethods();
for(int i=0;i< m.length;i++){
System.out.println(m[i].toString());
}
}
}
其中c.getDeclaredMethods()的作用是(D)
A.取得类的公有方法对象
B.取得类的所有公有方法名称
C.取得类的所有方法对象
D.以上都不正确
getMethods():获取该对象实现或继承的所有公共方法,包括继承的方法
getDeclaredMethods():获取该对象所有声明的方法,包含该类中所有权限的方法,不包含从父类中继承的方法
(2)有如下4条语句:()
Integer i1=59;
int i2=59;
Integer i3=Integer.valueOf(59);
Integer i4=new Integer(59);
以下输出结果为false的是(C)
A. System.out.println(i1 == i2);
B. System.out.println(i1 == i3);
C. System.out.println(i3 == i4);
D. System.out.println(i2 == i4);
Integer.valueOf()方法
Integer i1=59; Integer i3=Integer.valueOf(59);这两种写法等价,且i1==i3的结果为true,i1和i2是同一个对象。只有这种说法才能让i1=i2的结果为true.这里就跟自动装箱的低层实现有关了
比较i1 == i2时进行自动拆箱,然后比较数值部分
i1 == i3 同理,自动拆箱
i3 == i4 比较的是对象的地址
二、编程题
2.1 最难的问题
2.1.1 题目
2.1.1 题解
思路:
(1)遍历字符串,获取每个位置的字符
(2)如果是空格,直接拼接
(3)如果不是空格,则是大写字母,如果是’E’之后的,拼接为当前字符-5
如果是’A’~‘E’,直接-5,会造成越界,因此我们可以用当前字符+21,起到的效果是一样的
代码:
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextLine()){
String str=scanner.nextLine();
StringBuffer ret=new StringBuffer();
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
if(c>='A' && c<='E'){
ret.append((char)(c+21));
}else if(c>'E' && c<='Z'){
ret.append((char)(c-5));
}else {
ret.append(c);
}
}
System.out.println(ret.toString());
}
}
还有一种做法就是将密文和原文的对应关系存储到一个map中,然后直接遍历一遍字符串就可以了
2.2 因子个数
2.2.1 题目
2.2.2 题解
思路:从最小因子2到数字的最大因子数(数字的平方根)开始判断是否能够取余,
可以则循环除以该因子直到取余不为0,因子个数+1;否则使用下一个因子计算;
最终整除了各个因子数之后剩余的数字不为1则本身也是一个因子,因此因子数+1
代码:
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextInt()){
int n=scanner.nextInt();
int count=0;
for(int i=2;i<=Math.sqrt(n);i++){
if(n%i==0){
while(n%i==0){
n/=i;
}
count++;
}
}
if(n!=1){
count++;
}
System.out.println(count);
}
}