目录
一、选择题
二、编程题
1、最难的问题
2、因子个数
一、选择题
(1)当包装类与基本数据类型比较,包装类会自动茶香变为基本数据类型再比较;
(2)包装数据类直接赋值,默认调用其对用的valueOf()方法。那么Integer i03=Integer.valueOf(59);就等价于Integer i01=59;valueOf()操作-128 ~ 127之内的整型,在第一次引用,会在缓存中new一个对象;再次引用,直接从缓存中查找;操作-128 ~ 127之外的整型,则每次都要new一个对象。也就是说如果已经创建了一个-128 ~ 127之间的整数,使用valueOf创建第二次时,不会使用new关键字,而用已经缓存的对象。因此System.out.println(i01i03);输出true。
(3)包装类是基础数据类型的引用类型,i04的定义使用了new关键字,这会开辟出一块新内存来放置值为59的Integer对象。那么两个地址不同的引用类型变量进行==判断结果自然是false。
笔试强训day30_考虑下面这个简单的例子, [单选题5分 public class dumpmethods( publ_@~007的博客-CSDN博客
一道关于Integer的笔试题_Sweetie77的博客-CSDN博客
Java中String类型变量是immutable(不可变的)。
尽管 change()方法中的str与sv.str都是实例成员变量值"6"的引用, 由于String类型的 不可变性,change()方法中的str="10"语句实际上是将传入的str副本引用指向了一个值为“10”的新的内存地址,但原数据引用 sv.str的引用值(也就是“6”的内存地址)并没有发生改变,因此sv.str指向的值仍旧为6。
这种情况下则是将srt指向的地址的值从1改成了2,而不是直接将str的副本引用指向一个新地址。
这种情况则是将str的副本引用指向了一个新的内存地址,但原数据引用sv.str并不受影响。笔试强训day30_考虑下面这个简单的例子, [单选题5分 public class dumpmethods( publ_@~007的博客-CSDN博客
Java内存管理大杂烩_还能坚持的博客-CSDN博客
二、编程题
1、最难的问题
思路:
遍历字符串:如果是大写字母就进行变换,否则说明是空格直接拼接;
由于题目中说了只有大写字母和空格,所以问题1可以忽略 。
问题1:怎么判断是大写字母?
ASCII:大写字母的范围是65-94 int a = Integer.valueOf(char)
问题2:如果是大写字母,就进行转化:
(1)如果要解密的密码字母在A-E之间,则其对应的原文值=密码字母+21;
(2)否则:原文值=密码字母-5;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()){
//1、获取输入的字符串
String str = sc.nextLine();
//2、定义一个字符串容器,用来拼接解密后的字符
StringBuilder sb = new StringBuilder();
//2、遍历字符串,获取字符:判断字符的所属类型
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
//如果是空格,直接拼接
if(c == ' '){
sb.append(" ");
}else{
//说明是大写字母
//判断大写字母的类型:是大于E的情:注意这里-5或者+21之后要转为char类型
if(c > 'E'){
sb.append((char)(c-5));
}else{
//是A-E的情况
sb.append((char)(c+21));
}
}
}
System.out.println(sb);
}
}
2、因子个数
一开始题目都没有读懂,不理解示例的结果为什么是这样的?
后来发现这里的因子指的是质因子:
思路:
理解一个数是由若干个素数乘积得来的,那么我们可以从小到大进行枚举,如果n能够被整除,则将n中所有的该因子都除尽,并将n更新为除尽后的数,然后枚举下一个数以此类推。当然,如果n本身就是一个素数,最终n的值会大于1,所以最后还需要判断n是否为1,如果不为1因子还包括n本身,计数需要加1。
【算法刷题日记之本手篇】最难的问题与因子个数_未见花闻的博客-CSDN博客
public static void main(String[] args) {
//1、获取输入数据
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
int n = sc.nextInt();
//2、定义变量count
int count = 0;
for (int i = 2; i < Math.sqrt(n); i++) {
//3、因为不能重复计数,所以先算符合因子数的个数
if(n % i == 0){
count++;
}
//4、更新n的值
while (n % i == 0){
n/=i;
}
}
//5、判断n值是否为1:如果不为1说明该数字是一个质数,因子数包含n本身,计数要加1
if(n!=1){
count++;
}
System.out.println(count);
}
}