黑马程序员技术交流社区

标题: 面试难题解析 [打印本页]

作者: 残月    时间: 2015-10-19 17:56
标题: 面试难题解析
1.28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)

2.编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。

3.编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象, 并调用该对象中的方法。

作者: 残月    时间: 2015-10-19 18:24
package cn.itcast_01;

/*
* 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
* 假如是50人,又需要买多少瓶可乐?(需写出分析思路)
*
* 分析:
*                 1.创建一个方法,计算多少瓶够人数喝
*                 2.方法计算思路:
*                         除去第一个人,后面的每3人为1组,不够3人为最后一组
*                         如果最后一组是3个人,那么每组只需要买2瓶,
*                         最后获取第一人的1个瓶盖,够3个瓶盖
*                         上一组人留下的瓶盖就可以换取一瓶,把瓶盖留给下一组用
*                         如果最后一组不够3人,则每人买一瓶
*                 3.调用方法
*/
public class Test1 {
        public static void main(String[] args) {
                method(28);
                method(50);
               
        }

        public static void method(int peopleNum) {
                /*
                 * 1是第一个人买的数量
                 * (peopleNum - 1) / 3) * 2:是除去第一个人,人数够3人小组买的数量
                 * (peopleNum - 1) % 3:是去除第一人,人数不够3人的小组买的数量
                 */
                int keleNum = 1 + ((peopleNum - 1) / 3) * 2 + (peopleNum - 1) % 3;
               
                System.out.println("假如是"+peopleNum+"人需要买"+keleNum+"瓶可乐");
        }
}

作者: 残月    时间: 2015-10-19 18:27
本帖最后由 残月 于 2015-10-19 19:29 编辑

package cn.itcast_02;


/*
* 编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。
* 售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。
*/
public class Ticket {
        //定义票
        private int ticketNumber =100;

        public Ticket() {
                super();
        }

        public int getTicketNumber() {
                return ticketNumber;
        }        
}

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class TicketSealCenter implements Runnable{
        
        //创建票信息对象
        private Ticket t = new Ticket();
        //定义锁对象
        private Lock lock = new ReentrantLock();
        //定义一个数字接收票的剩余
        int num = t.getTicketNumber();
        @Override
        public void run() {
                while(true){
                        try{
                        //加鎖
                        lock.lock();
                        if(num > 0){
                                try {
                                        Thread.sleep(1000);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                                System.out.println(Thread.currentThread().getName()+"正在出售第"+(num--)+"票");
                        }
                }finally{
                        //释放锁
                        lock.unlock();
                }
                }
        }
}
public class SealWindow {
        public static void main(String[] args) {
                //创建售票中心对象
                TicketSealCenter tsc = new TicketSealCenter();
                //创建窗口对象
                Thread t1 = new Thread(tsc,"窗口1");
                Thread t2 = new Thread(tsc,"窗口2");
                Thread t3 = new Thread(tsc,"窗口3");
               
                //启动线程
                t1.start();
                t2.start();
                t3.start();
        }
}

作者: 残月    时间: 2015-10-19 18:39
package cn.itcast_02;
/*
* 编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象, 并调用该对象中的方法。
*/
public class Person {
        private String name;
        private int age;

        public Person() {
        }

        public Person(String name, int age) {
                this.name = name;
                this.age = age;
        }

        public void show() {
                System.out.println("就是任性,就是show");
        }

        @Override
        public String toString() {
                return "姓名:" + name + ", 年龄:" + age;
        }
}
public class ClassTest {
        public static void main(String[] args) throws Exception, SecurityException {
                Class<Person> c = Person.class;
                //获取构造
                Constructor<Person> con =  c.getConstructor(String.class,int.class);
                Object obj = con.newInstance("王五",15);
                System.out.println(obj);

                //获取show方法并使用
                Method m = c.getMethod("show");
                m.invoke(obj);
        }
}

作者: 吾要娶她    时间: 2015-10-19 21:27
mark'一下  等会看
作者: lzh838330255    时间: 2015-10-19 23:39
有点难!
作者: 奔跑的小红帽    时间: 2015-10-20 00:24
收藏下,完了看看
作者: 删''情    时间: 2015-10-20 01:21
28个人买19瓶,,50个人买34瓶,,
作者: hdhdhd    时间: 2015-10-20 10:06
第一题如果面试的话,暴力破解应该不错,个人见解,大神勿喷
作者: 斑点狗    时间: 2015-10-20 10:08
厉害,好贴!赞一个!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2