A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

水竹

  • 黑马币:84

  • 帖子:270

  • 精华:0

回帖奖励 +1

领奖。。

点评

汗……笔记本触摸板不好用,往上翻页时候不小心点到反对……  发表于 2014-10-6 22:05
回复 使用道具 举报
第四期:
  1. /*
  2.         第一个人10岁,第二个人比第一个人大2岁,以此类推,
  3.         请用递归方式计算出第N(N>2)个人多大?
  4. */
  5. class Demo4
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 int number=4;
  10.                 System.out.println("第"+number+"个人"+getAge(number)+"岁");
  11.         }
  12.         public static int getAge(int number)
  13.         {
  14.                 int age=8;
  15.                 if (number!=1)
  16.                         age=getAge(--number);
  17.                 return age+2;
  18.         }
  19. }
复制代码



回复 使用道具 举报

回帖奖励 +1

感谢楼主分享!
回复 使用道具 举报

回帖奖励 +1

谢谢分享
回复 使用道具 举报
Eagle 高级黑马 2014-10-6 22:34:03
25#

回帖奖励 +1

看着有点。。感觉。晕。。
回复 使用道具 举报
liqi 中级黑马 2014-10-6 22:41:15
26#

回帖奖励 +1

面试也通过了?入学还要用技术分的
回复 使用道具 举报

回帖奖励 +1

好吧   目前我还没有到做入学测试题的地步。。。看看吧。。
回复 使用道具 举报
liqi 发表于 2014-10-6 22:41
面试也通过了?入学还要用技术分的

面试没有,过几天面试,不过我换了亲友券,还用技术分么?
回复 使用道具 举报
liqi 中级黑马 2014-10-6 22:46:24
29#
水竹 发表于 2014-10-6 22:42
面试没有,过几天面试,不过我换了亲友券,还用技术分么?

亲友券好像不用
回复 使用道具 举报
Eagle 发表于 2014-10-6 22:34
看着有点。。感觉。晕。。

呃,因为那些注释么,在eclipse里面还是好好的,但是贴上来就乱掉了
回复 使用道具 举报
第五期:(我尚未过面试,做这些练习也算是复习一下,但是线程池貌似不在范围内,就先简单的用一下好了)
  1. /*说明:由于本周末要给女朋友过生日,因此届时可能无心审核技术题,
  2.                                 因此特将本周末技术分活动提前举行。
  3.                                 通过查询JDK自带的线程池,学习线程池的使用方法。并做以下练习:
  4.                                 通过从线程池中获取的线程执行一个多线程任务(任务自定义)。
  5.                                 想得满分,至少得写出两种线程池的用法,并附带详细的注释。
  6. */
  7. import java.util.*;
  8. import java.util.concurrent.Executors;
  9. class Demo5
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 // 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
  14.                 Executors.newSingleThreadExecutor().execute(new Runnable()
  15.                 {
  16.                         public void run()
  17.                         {
  18.                                 System.out.println(Thread.currentThread().getName()+":正在运行ing……");
  19.                         }
  20.                 });
  21.         }
  22. }
复制代码



回复 使用道具 举报 1 0
第五期:
我过几天面试,做这些题也是为了复习,但是线程池貌似不在面试的范围内,所以就简单的用一下好了。
  1. /*说明:由于本周末要给女朋友过生日,因此届时可能无心审核技术题,
  2.                                 因此特将本周末技术分活动提前举行。
  3.                                 通过查询JDK自带的线程池,学习线程池的使用方法。并做以下练习:
  4.                                 通过从线程池中获取的线程执行一个多线程任务(任务自定义)。
  5.                                 想得满分,至少得写出两种线程池的用法,并附带详细的注释。
  6. */
  7. import java.util.*;
  8. import java.util.concurrent.Executors;
  9. class Demo5
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 // 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
  14.                 Executors.newSingleThreadExecutor().execute(new Runnable()
  15.                 {
  16.                         public void run()
  17.                         {
  18.                                 System.out.println(Thread.currentThread().getName()+":正在运行ing……");
  19.                         }
  20.                 });
  21.         }
  22. }
复制代码
回复 使用道具 举报
  1. /*说明:由于本周末要给女朋友过生日,因此届时可能无心审核技术题,
  2.                                 因此特将本周末技术分活动提前举行。
  3.                                 通过查询JDK自带的线程池,学习线程池的使用方法。并做以下练习:
  4.                                 通过从线程池中获取的线程执行一个多线程任务(任务自定义)。
  5.                                 想得满分,至少得写出两种线程池的用法,并附带详细的注释。
  6. */
  7. import java.util.*;
  8. import java.util.concurrent.Executors;
  9. class Demo5
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 // 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
  14.                 Executors.newSingleThreadExecutor().execute(new Runnable()
  15.                 {
  16.                         public void run()
  17.                         {
  18.                                 System.out.println(Thread.currentThread().getName()+":正在运行ing……");
  19.                         }
  20.                 });
  21.         }
  22. }
复制代码
回复 使用道具 举报
好吧,第五期的代码贴不上来,说是需要审核,而且内容是线程池的题目,我也是刚看的文档随便用了一下,贴不上来就贴不上来吧。
回复 使用道具 举报

回帖奖励 +1

本帖最后由 十万一千 于 2014-10-7 00:23 编辑

最后一题
  1. package com.itheima.test;
  2. import java.util.LinkedList;
  3. import java.util.List;

  4. public class 踢数 {
  5.         // 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  6.         public static void main(String[] args) {
  7.                 List<Integer> circle = new LinkedList<Integer>();
  8.                 for (int i = 1; i <= 100; i++) {
  9.                         circle.add(i);
  10.                 }
  11.                 System.out.println("剩余编号:" + ti(circle, 1, 14));
  12.         }

  13.         private static Integer ti(List<Integer> circle, Integer first, Integer kill) {
  14.                 if (circle.size() == 1) {
  15.                         return circle.get(0);
  16.                 } else {
  17.                         for (int i = 0; i < circle.size(); i++) {
  18.                                 if (first == kill) {
  19.                                         circle.remove(i);
  20.                                         first = 0;
  21.                                         i--;
  22.                                 }
  23.                                 first++;
  24.                         }
  25.                         return ti(circle, first, kill);
  26.                 }
  27.         }
  28. }
复制代码


点评

递归。我下边写错了,还是改一下吧,免得给人误导。  发表于 2014-10-8 02:56
厉害!当时我就没想起来用迭代  发表于 2014-10-7 00:31
回复 使用道具 举报 3 0
第六期:
  1. /*
  2.         通过查看源码、百度等多种手段学习并理解JavaSE中String、
  3.         StringBuilder、ArrayList、HashSet等底层数据结构。
  4.         要求将每个底层数据结构整理成一段文字并提交
  5.         (对每个数据结构都能说出详细的原理则可获取满分)。

  6.         String:
  7.                 jdk8.0源码里面是这么写的:
  8.                   /** The value is used for character storage. * /
  9.                         private final char value[];
  10.                         说明String底层使用了一个final类型的char数组,
  11.                         这个final也解释了为什么String一旦创建不能改变。
  12.         StringBuilder:
  13.                 /**
  14.                  * The value is used for character storage.
  15.                  * /
  16.                 char[] value;
  17.                 StringBuilder继承自AbstractStringBuilder,后者源码是这么写的,
  18.                 它底层也是使用了一个char数组,
  19.                 但是这个数组并未声明为final类型,所以内容可以改变。

  20.                 至于它的append(String)方法,是调用AbstractStringBuilder中被它
  21.                 复写的方法实现的,在后者内部几个方法间调来调去后(判断装不装的下之类的),
  22.                 来到了这个方法:
  23.                 void expandCapacity(int minimumCapacity) {
  24.                         int newCapacity = value.length * 2 + 2;
  25.                         if (newCapacity - minimumCapacity < 0)
  26.                                 newCapacity = minimumCapacity;
  27.                         if (newCapacity < 0) {
  28.                                 if (minimumCapacity < 0) // overflow
  29.                                         throw new OutOfMemoryError();
  30.                                 newCapacity = Integer.MAX_VALUE;
  31.         }
  32.                 这是给自己的value(也就是刚说的那个char数组)扩容的过程
  33.                 首先它明知道装不下,还不死心,先给自己的长度*2+2了一次,
  34.                 之后有判断装不装的下,要是装得下的话就装,要是装不下的话
  35.                 就让自己长度刚刚好装下,然后装。

  36.         ArrayList:
  37.                 transient Object[] elementData; // non-private to simplify nested class access
  38.                 源码里是这么写的,可见它底层是用的一个Object类型的数组来实现的。
  39.                 至于为什么前面加了transient关键字,说来话长,我也是百度之后才明白的,
  40.                 而且与这道题没关系,所以想了解的可以去百度一下“transient ArrayList”,出来的
  41.                 第一个链接是一个百度知道的问答,里面有高人讲了原理,感兴趣的可以看一下。

  42.                 至于它里面的add方法,则是调用了System.arraycopy()这个方法,这个方法的功能是:
  43.                 “从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。”

  44.         HashSet:
  45.                 private transient HashMap<E,Object> map;
  46.                 依据HashSet的源码,它内部其实是封装了一个HashMap的,这一点毕老师的视频里面
  47.                 也说过。
  48.     }
  49. */
复制代码
回复 使用道具 举报
本帖最后由 十万一千 于 2014-10-7 00:51 编辑

不太会写注释啊,凑合着看下哈。。。反正大体思路就是 首先确认每次迭代开始时第一个元素应该报什么数,然后按照规则移除节点,直到集合size为1就结束了。。。
回复 使用道具 举报
十万一千 发表于 2014-10-7 00:40
不太会写注释啊,凑活着看下哈。。。反正大体思路就是 首先确认每次迭代开始时第一个元素应该报什么数,然 ...

哈哈,我其实也不会写注释,前面的那些都是为了测试硬着头皮写的,写注释比写代码都艰难……刚发现,我刚才点评那里写错了,把递归写成迭代了……
回复 使用道具 举报
happyto1021 来自手机 中级黑马 2014-10-7 00:46:14
39#
恭喜恭喜
回复 使用道具 举报

回帖奖励 +1

楼主很辛苦,支持下,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马