笔试强训(三十)

一、选择题

(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);
     }
 }       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值