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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

7、有一组奖品:{macBookPro:8988?,三星note7:5695?,小米4:2688?,联想P612:866?,iphone7:5688?}(每个奖品只有一个,并且同一时间只能有一个人抽奖);开启两个线程A、B模拟两个人抽奖的过程(每个人抽取的次数不做限制),直到奖品抽完为止,打印出每个人抽到的奖品和价值金额;







8、接收用户从控制台输入的一个区间,在该区间范围内(包含左右边界),随机生成20个不重复的数字(若用户输入该区间范围小于20,则提示用户重新给定区间):

       a.统计出所有的偶数,输出到控制台;

       b.将剩下的数字按照降序排序后存放到当前项目下,命名为number.txt,每个数用“-” 隔开; 比如:13-1-5-27-23

示例

控制台提示:        请输入范围大于20的区间,比如“10-35”
用户输入:        10-18
控制台提示:        对不起,您输入的区间范围小于20,请重新输入
用户输入:        5-26
控制台提示:        偶数有:8,12,6,24
控制台提示:        将奇数写入number.txt 成功

点评

1111111111111111111111111111111111  发表于 2017-2-20 10:01

32 个回复

倒序浏览
没人吗?求各位哥哥姐姐
回复 使用道具 举报
实在是不会啊,求教求教
回复 使用道具 举报
回复 使用道具 举报
初级选手报道,表示看不懂啊
回复 使用道具 举报
第一题

import java.util.Arrays;
import java.util.Random;

public class ceshione {

        public static void main(String[] args) {
                Ticket2 runTicekt = new Ticket2();
                       Thread th1 = new Thread(runTicekt, "A");
                      Thread th2 = new Thread(runTicekt, "B");
                      th1.start();
                      th2.start();
        }
}

class Ticket2 implements Runnable {
        String[] s = { "macBookPro:8988","三星note7:5695","小米4:2688","联想P612:866","iphone7:5688" };

        Object mutex = new Object();// 锁

        public void chou() {
                synchronized (mutex)// 当操作的是共享数据时,
                {
                       
                        Random random = new Random();
                        if(s.length - 1==0){
                                String num[]=s[0].split(":");
                                System.out.println(Thread.currentThread().getName() + "抽到了" + num[0]+"   价值:"+num[1]);
                                s[0] = s[s.length - 1];

                                // 数组缩容
                                s = Arrays.copyOf(s, s.length - 1);
                        }
                        else{
                               
                        int a = random.nextInt(s.length - 1);
                        String num[]=s[a].split(":");
                        System.out.println(Thread.currentThread().getName() + "抽到了" + num[0]+"   价值:"+num[1]);
                        s[a] = s[s.length - 1];
                        // 数组缩容
                        s = Arrays.copyOf(s, s.length - 1);
                        }

               
                }
        }

        @Override
        public void run() {
                // TODO Auto-generated method stub
                while (s.length > 0) {
                       
                        chou();
                        if(s.length==1){
                                return;
                        }
                        try {
                                Thread.sleep(100);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                       
                }

        }

}
回复 使用道具 举报
11111111111
回复 使用道具 举报
kimoti 中级黑马 2017-2-10 18:10:55
8#
第一题

public class Prize {
    private String name;
    private int value;
   
    public Prize(String name,int value){
        this.name = name;
        this.value = value;
    }
   
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }

}

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class LuckyDraw {
    private List<Prize> prizes = new ArrayList<Prize>();
   
    public LuckyDraw(){
        Prize macBook = new Prize("macBookPro",8988);
        Prize note7 = new Prize("note7",5695);
        Prize xiaomi = new Prize("xiaomi4",2688);
        Prize legend = new Prize("legendP612",866);
        Prize iphone7 = new Prize("iphone7",5688);
        
        prizes.add(macBook);
        prizes.add(note7);
        prizes.add(xiaomi);
        prizes.add(legend);
        prizes.add(iphone7);
    }
   
    public synchronized Prize draw(){
        Random r = new Random();
        if(prizes.size()==0){
            return null;
        }
        int index = r.nextInt(prizes.size());
        System.out.println("size========="+prizes.size());
        System.out.println("index========"+index);
        return prizes.remove(index);
    }
   
}


public class Draw implements Runnable{
   
    private LuckyDraw luckyDraw;
   
    public Draw(LuckyDraw luckyDraw){
        this.luckyDraw = luckyDraw;
    }

    @Override
    public void run() {
        Prize prize = luckyDraw.draw();
        while(prize!=null){
            System.out.println(Thread.currentThread().getName()+" draw "+prize.getName()+",value="+prize.getValue());
            prize = luckyDraw.draw();
        }
    }
   
}

public class TestDraw {

    public static void main(String[] args) throws Exception{
        LuckyDraw luckyDraw =  new LuckyDraw();
        Draw runnable = new Draw(luckyDraw);
        
        Thread draw1 = new Thread(runnable);
        Thread draw2 = new Thread(runnable);
        
        draw1.start();
        draw2.start();

    }

}
回复 使用道具 举报
手痒写了一下第二题

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;

public class day4 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int limitLeft=0;
        int limitRight=0;
        StringBuffer writebuffer=new StringBuffer();
        List<String> wriList=new ArrayList<String>();
        
        System.out.println(" 请输入范围大于20的区间,比如“10-35“");
        //获取区间
        while(true) {
               
                String inpudata=scanner.next();
                limitLeft=Integer.valueOf(inpudata.split("-")[0]);
                limitRight=Integer.valueOf(inpudata.split("-")[1]);
               
                if(limitRight-limitLeft>=20) {
                    //System.out.println(limitRight-limitLeft);
                    scanner.close();
                    break ;
                }
                System.out.println("对不起,您输入的区间范围小于20,请重新输入");
               
        }
        
        //获取符合区间的随机数
        TreeSet<Integer> result=new TreeSet<>();
        while(result.size()<20){
            int ramod=(int)(Math.random()*limitRight);
            if(ramod>=limitLeft&&ramod<=limitRight) {
                result.add(ramod);
            }
        }
        
        //区分选出来的奇数和偶数
        System.out.print("偶数有:");
        Iterator<Integer> it=result.iterator();
        while(it.hasNext()) {
            int temp=it.next();
            if((temp%2)==0) {
                System.out.print(temp+"   ");
            }
            else {
                wriList.add(Integer.toString(temp));
            }
        }
        
        //将奇数写入文件
        try {
            File file=new File("number.txt");
            FileOutputStream fp=new FileOutputStream(file);
            OutputStreamWriter writer=new OutputStreamWriter(fp);
            
            int oddNum=wriList.size();
            for(int i=0;i<oddNum;i++) {
                writebuffer.append(wriList.get(oddNum-1-i)+(i==oddNum-1?"":"-"));
            }
            
            
            writer.append(writebuffer);
            
            writer.close();
            fp.close();
            
            System.out.print("将奇数写入number.txt 成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
    }
   
   
}
回复 使用道具 举报
靠就业班的考试题吗?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
package com.heima.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class Test2 {
        //创建map集合,
        static HashMap<String, Integer> hm = new HashMap<>();        //static修饰可以让所有线程共享该集合
       
        //添加集合元素,放入静态代码块
        static{
                hm.put("macBookPro", 8988);
                hm.put("三星note7", 5695);
                hm.put("小米4", 2688);
                hm.put("联想", 866);
                hm.put("iphone", 5688);
        }

        public static void main(String[] args) {               
               
                new Thread("线程一"){
                        public void run(){
                                        while(hm.size() > 0){                                       
                                                synchronized (Test2.class) {        //同步代码块,放在while之后,不然一条线程就能把奖品抽完
                                                        try {
                                                                Thread.sleep(1000);                                //可加可不加
                                                        } catch (InterruptedException e) {
                                                               
                                                                e.printStackTrace();
                                                        }
                                                        Set<String> arr = hm.keySet();        //获得键的集合
                                                        Iterator<String> it = arr.iterator();        //获得迭代器
                                                        if(arr.size() > 0){                                                               
                                                                String getPhone = it.next();        //获得键,即抽到手机
                                                                int value = hm.get(getPhone);        //通过键获得值,即手机价格
                                                                System.out.println(getName() + "抽到了" + getPhone + ",价格是" + value);
                                                                hm.remove(getPhone);                        //移除集合元素
                                                }
                                        }
                                }
                        }
                }.start();
               
                new Thread("线程二"){
                        public void run(){
                                        while(hm.size() > 0){                                       
                                                synchronized (Test2.class) {
                                                try {
                                                                Thread.sleep(1000);                               
                                                        } catch (InterruptedException e) {
                                                               
                                                                e.printStackTrace();
                                                        }
                                                Set<String> arr = hm.keySet();
                                                Iterator<String> it = arr.iterator();
                                                if(arr.size() > 0){                                                               
                                                        String getPhone = it.next();
                                                        int value = hm.get(getPhone);
                                                        System.out.println(getName() + "抽到了" + getPhone + ",价格是" + value);
                                                        hm.remove(getPhone);
                                                }
                                        }
                                }
                        }
                }.start();
        }

}
回复 使用道具 举报
KyneZhk 发表于 2017-2-6 22:23
第一题:定义抽奖箱类,实现Runnable
[mw_shl_code=applescript,true]package com.demo5;

看来你用arraylist  比我用hashmap  来的简单
回复 使用道具 举报
        public static void main(String[] args) throws IOException {
                Scanner sc = new Scanner(System.in);
                Random rd = new Random();
                String line;
                String[] arr;
                int firstNum;
                int lastNum;
                ArrayList<Integer> list = new ArrayList<>();
                FileWriter fw = new FileWriter("number.txt");
                System.out.println("请输入一个范围大于20的区间,比如\"10-35\"");
                while(true){
                        line = sc.nextLine();
                        arr = line.split("-");
                        firstNum = Integer.valueOf(arr[0]);
//                        System.out.println(firstNum);
                        lastNum = Integer.valueOf(arr[1]);
//                        System.out.println(lastNum);
                        if((lastNum - firstNum) < 20){
                                System.out.println("对不起,您输入的区间范围小于20,请重新输入");
                                continue;
                        }else{
                                for(int i = firstNum; i <= lastNum; i++){
                                        if(i % 2 == 0){
                                                list.add(i);                                               
                                        }else{
                                                if(i == lastNum || i ==lastNum - 1){                                               
                                                                fw.write(String.valueOf(i));
                                                }else {                                                       
                                                        fw.write(i + "-");
                                                }
                                        }
                                }
                                fw.close();
                                System.out.print("偶数有:");
                                for (int i = 0; i < list.size(); i++) {
                                        if(i == list.size() - 1){
                                                System.out.print(list.get(i));
                                        }else{
                                                System.out.print(list.get(i) + ",");
                                        }
                                }
                                System.out.println();
                                System.out.println("将奇数写入number.txt 成功");
                                break;
                        }
                       
                }
        }

}
回复 使用道具 举报
刚刚那遍要求看错了

public class Test4 {
        public static void main(String[] args) throws Exception {
                Scanner sc = new Scanner(System.in);
                Random rd = new Random();
                String line;
                String[] arr;
                int firstNum;
                int lastNum;
                int num;
                ArrayList<Integer> list3 = new ArrayList<>();                //放奇数
                ArrayList<Integer> list2 = new ArrayList<>();                //放偶数
                ArrayList<Integer> list = new ArrayList<>();                       
                BufferedWriter bw = new BufferedWriter(new FileWriter("number.txt"));
                System.out.println("请输入一个范围大于20的区间,比如\"10-35\"");
                while(true){
                        line = sc.nextLine();
                        arr = line.split("-");
                        firstNum = Integer.valueOf(arr[0]);
//                        System.out.println(firstNum);
                        lastNum = Integer.valueOf(arr[1]);
//                        System.out.println(lastNum);
                        if((lastNum - firstNum) < 20){
                                System.out.println("对不起,您输入的区间范围小于20,请重新输入");
                                continue;
                        }else{
                                while (list.size() <= 20) {
                                        num = rd.nextInt(lastNum - firstNum) + firstNum;
                                        if(!list.contains(num))
                                                list.add(num);
                                }
                                for(Integer i : list){
                                        if(i % 2 == 0){
                                                list2.add(i);                                                               
                                        }else if (i % 2 == 1){
                                                list3.add(i);
                                                /*if(i == lastNum || i ==lastNum - 1){                                               
                                                                fw.write(String.valueOf(i));
                                                }else {                                                       
                                                        fw.write(i + "-");
                                                }*/
                                        }
                                }
                                System.out.print("偶数有:");
                                for (int i = 0; i < list2.size(); i++) {
                                        if(i == list2.size() - 1){
                                                System.out.print(list2.get(i));
                                        }else{
                                                System.out.print(list2.get(i) + ",");
                                        }
                                }
                                System.out.println();
                                Collections.sort(list3);
                                for (int i = list3.size() - 1; i >= 0; i--) {
                                        if(i == 0){
                                                bw.write(list3.get(i).toString());
                                        }else
                                                bw.write(list3.get(i) + "-");
                                }
                                bw.close();
                                System.out.println("将奇数写入number.txt 成功");
                                break;
                        }
                       
                }
        }
}
回复 使用道具 举报
KyneZhk 发表于 2017-2-6 22:23
第一题:定义抽奖箱类,实现Runnable
[mw_shl_code=applescript,true]package com.demo5;

怎么找不到concurrent
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
KyneZhk 发表于 2017-2-15 16:53

Lock在api中找不到
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
newu 黑马帝 2017-2-15 18:07:50
17#
package com
回复 使用道具 举报
留个坐标,学习学习
回复 使用道具 举报
留下几号,这是就业班的考试题目吗
回复 使用道具 举报
7期的学员表示看不懂,太难,压力山大
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马