周一到周六每天一题,你对了几个?

简介: 周一到周六每天一题,你对了几个?

周一,我不知道的小知识!

//第一组
//1
String str1 = "hello";
str1 += ",world";
//2
StringBuilder sb1 = new StringBuilder("hello");
sb1.append(",world");

//第二组
//1
String str2 = "hello";
for (int i = 0; i < 3; i++) {
    str2 += ",world";
}
//2
StringBuilder sb2 = new StringBuilder("hello");
for (int i = 0; i < 3; i++) {
    sb2.append(",world");
}

问: 第一组的1和2的效率谁快谁慢。那第二组呢?
答:
第一组一样,1编译后编译器会优化成2一样;
第二组2快,1编译后每次循环都会创建一个StringBuilder对象然后toString一次。

周二,我竟然栽在继承上了。。

public class Test {
    
  static class Base{}

  static class Agg extends Base {
    public String getFields() {
        String name = "Agg";
        return name;
    }
  }

  public static void main(String[] args) {
    Base b = new Agg();
    System.out.println(b.getFields());
  }
}

问: 上面程序有问题吗?有的话请写出正确写法,得到输出结果是“Agg”
答:
其实Base类没有那个方法,所以无法调用,编译报错
但是我想输出“Agg”我们可以把父类强转成子类,所以结果是:

System.out.println(((Agg)b).getFields());

周三,万恶的2,你能怎么这么。。。

public static void main(String[] args) {
    //判断一个数是偶数 输出是true
    System.out.println(test1(2));

    //判断一个正整数是2的整数次幂 输出是false
    System.out.println(test2(18));
}
//判断一个数是偶数
private static Boolean test1(Integer num) {
    //TODO
}

//判断一个正整数是2的整数次幂
private static Boolean test2(Integer num) {
    //TODO
}

问: 请用各用一段代码补全上面两个程序,使其具有相应的功能。
答:

  1. return (num & 1) == 0;
  2. return (num & num - 1) == 0;

第二个的解释吧,有点多,给你一篇我的文章
https://mp.weixin.qq.com/s/7SSqiWt9bSnqZW8EgIB6nA

周四,求一个无序数组里有99个不重复的正整数,

//求一个无序数组里有99个不重复的正整数,
//1-100少了一个数,找出那个少的数。
public static void main(String[] args) {
  List<Integer> list = geList();
  list.remove(0);
  //TODO,求出我移除的数字是多少

}

//用于生成 一个1-100 少一个数又不连续的list
private static List<Integer> geList() {
  int[] z = IntStream
          .iterate(1, i -> i + 1)
          .limit(100).toArray();
  int a,b;
  Random r = new Random();
  //随机交换values.length次
  for(int i = 0;i < values.length;i++){
  //随机产生一个位置
    a = Math.abs(r.nextInt()) % (z.length-1);
    //随机产生另一个位置
    b = Math.abs(r.nextInt()) % (z.length-1); 
    //交换位置
    if(a != b){
        z[a] = z[a] ^ z[b];
        z[b] = z[a] ^ z[b];
        z[a] = z[a] ^ z[b];
    }
  }
  List<Integer> collect = Arrays
          .stream(z).boxed()
          .collect(Collectors.toList());
  return collect;
}

问: 补全程序,其实就是一个无序数组有99个不重复的正整数,1-100少了一个,求少的哪个?
答:
求和相减

System.out.println((1 + 100) * 50 - list.stream().mapToInt(Integer::intValue).sum());

周五,最简单的一道题?

public static void main(String[] args) {
    List<String> strList = 
    Arrays.asList("小", "编", "是");
    //TODO 补全代码
    //希望得到的输出结果是
    //[小, 编, 是, 笨, 蛋]
    System.out.println(strList);
}

问: **不要给我留面子,请让它输出 “[小, 编, 是, 笨, 蛋]”
答:
其实这个就是考察Arrays.asList转成list后续不能调用list的方法因为,
看他是个list其实底层还是个数组,
所以一般都会这么写List<String> strList = new ArrayList<>Arrays.asList("小", "编", "是"));
《代表尖括号,微信转译有问题,不论怎么样都无法写成尖括号其实这个就是考察Arrays.asList转成list后续不能调用list的方法因为,
看他是个list其实底层还是个数组,
所以一般都会这么写List<String> strList = new ArrayList<>Arrays.asList("小", "编", "是"));

周六,周六休息一下,来道脑力题

三个人合资买一件东西,这个产品原价是30元,
现在三个人每人出10元,到了商店,老板说今天
做活动,该产品只要25元,说完就给商店的营业
员5元钱,叫她还给三个客人,可是营业员偷藏
2元,将3元钱还给三位客人,现问三位客人每
人出了10元-退还的1元=9元.
3*9=27+营业员偷2元=29,
第一次三个人每人出了10(3*10=30),
现在这边只有29元,那还有一元钱是哪个人拿了?

问: 我的一块钱呢?
答:
回答者:一捧火山灰
三个客人每人出了10元,共30元,这30元包括:
①产品价格25元 ②营业员偷拿的2元 ③营业员返还的3元。
①+②+③=30元。
在营业员返还那3元后,③回到三人手里,三人付出的钱为①+②。
而上文中计算总钱数时却说"3*9=27+营业员偷2元"
相当于是①+②+②,并非总钱数。
因为营业员偷拿的钱是三人付出的钱的一部分,因此这里相加是不对的。
若要计算总钱数应为:三人付出的钱3*9+老板返还的3元=30元。

相关文章
|
7天前
|
算法
leetcode-1185:一周中的第几天
leetcode-1185:一周中的第几天
30 0
|
8月前
蓝桥杯(第一天)
蓝桥杯(第一天)
|
8月前
|
机器学习/深度学习 算法 C语言
60天力扣打卡(第一天)
60天力扣打卡(第一天)
|
存储 算法 索引
Leetcode第一周练习总结(1.1~1.7)
Leetcode第一周练习总结(1.1~1.7)
|
JSON Java 数据格式
周一到周六每天一题,你对了几个?
周一到周六每天一题,你对了几个?
周一到周六每天一题,再来6题!!!
周一到周六每天一题,再来6题!!!
SqlServer 获取工作日(周六、周日休息,周六日不休息,周六不休息)
SqlServer 获取工作日(周六、周日休息,周六日不休息,周六不休息)
183 0
L1-4 明天几号? (10 分)
输入今天的日期,输出明天的日期。
194 0
|
C#
C#得到某月最后一天晚上23:59:59和某月第一天00:00:00
C#得到某月最后一天晚上23:59:59和某月第一天00:00:00
202 0
C#得到某月最后一天晚上23:59:59和某月第一天00:00:00