黑马程序员技术交流社区

标题: 黑马入学考试两道题不会了,求学长们指教 [打印本页]

作者: 用户名已不存在    时间: 2017-2-6 18:04
标题: 黑马入学考试两道题不会了,求学长们指教
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 成功


作者: 用户名已不存在    时间: 2017-2-6 18:26
没人吗?求各位哥哥姐姐
作者: 用户名已不存在    时间: 2017-2-6 18:29
实在是不会啊,求教求教
作者: sb123456    时间: 2017-2-6 19:57


作者: zmanx    时间: 2017-2-6 21:18
初级选手报道,表示看不懂啊
作者: 用户名已不存在    时间: 2017-2-7 16:48
第一题

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();
                        }
                       
                }

        }

}
作者: yourtear    时间: 2017-2-7 20:30
11111111111
作者: 水墨画    时间: 2017-2-15 09:03
手痒写了一下第二题

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();
        }
        
        
    }
   
   
}

作者: lion86    时间: 2017-2-15 12:39
靠就业班的考试题吗?

作者: a469517790    时间: 2017-2-15 13:12
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();
        }

}
作者: a469517790    时间: 2017-2-15 13:15
KyneZhk 发表于 2017-2-6 22:23
第一题:定义抽奖箱类,实现Runnable
[mw_shl_code=applescript,true]package com.demo5;

看来你用arraylist  比我用hashmap  来的简单
作者: a469517790    时间: 2017-2-15 14:16
        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;
                        }
                       
                }
        }

}

作者: a469517790    时间: 2017-2-15 15:19
刚刚那遍要求看错了

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;
                        }
                       
                }
        }
}

作者: 黑马^123    时间: 2017-2-15 15:23
KyneZhk 发表于 2017-2-6 22:23
第一题:定义抽奖箱类,实现Runnable
[mw_shl_code=applescript,true]package com.demo5;

怎么找不到concurrent

作者: 黑马^123    时间: 2017-2-15 17:03
KyneZhk 发表于 2017-2-15 16:53

Lock在api中找不到

作者: newu    时间: 2017-2-15 18:07
package com
作者: 蔺小帅    时间: 2017-2-17 21:31
留个坐标,学习学习
作者: xiaoxipeng    时间: 2017-2-17 22:37
留下几号,这是就业班的考试题目吗
作者: 张昊123    时间: 2017-2-18 19:53
7期的学员表示看不懂,太难,压力山大
作者: 1139276313    时间: 2017-2-18 19:55
入学考试这么难吗?   完蛋了感觉有压力啊
作者: 海天酱油    时间: 2017-2-20 07:41
像天书一样,看不懂,但好想学

作者: 灬Wonder    时间: 2017-2-20 10:01
11111111111111111111111
作者: lvshen9    时间: 2017-2-21 13:19
[AppleScript] 纯文本查看 复制代码
package myexam;

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

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

        public static void main(String[] args) {
                Draw d=new Draw();
                Thread t1=new Thread(d);
                Thread t2=new Thread(d);
               
                t1.start();
                t2.start();
        }

}
class Draw implements Runnable{
       
ArrayList<String> al=new ArrayList<String>();
        //创建一个获取随机数的对象
        Random r=new Random();
       
{
                al.add("macBookPro:8988");
                al.add("三星note7:5695");
                al.add("小米4:2688");
                al.add("联想P612:866");
                al.add("iphone7:5688");
   
   
   
    }
   
   
       
        public void run() {
                while(true){
                        //同一时间只能有一个人抽奖,加锁控制线程
                        synchronized(this){
                               
                                if(al.isEmpty())
                                        break;
                                try {
                                        Thread.sleep(100);
                                } catch (InterruptedException e) {
                                        // TODO 自动生成的 catch 块
                                        e.printStackTrace();
                                }
                                int i=r.nextInt(al.size());
                                System.out.println(Thread.currentThread().getName()+"抽到"+al.get(i));
                                al.remove(i);
                               
                        }
                }
        }
       
}


作者: J丶SUN    时间: 2017-2-21 17:37
厉害 个个都是大神啊
作者: lvshen9    时间: 2017-2-21 19:46
本帖最后由 lvshen9 于 2017-2-21 19:47 编辑
  1. //这是做的第二题,应为题目说产生的随机数不能重复,所以采用Set集合,但后面打印的元素要求用“,”或“-”隔开,没想到方法,请大神帮忙解决
复制代码
[AppleScript] 纯文本查看 复制代码
package myexam;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;


/*
*
* 接收用户从控制台输入的一个区间,在该区间范围内(包含左右边界),随机生成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 成功

*
*
*/
public class Test8 {

        public static void main(String[] args) throws IOException {
                System.out.println("请输入范围大于20的区间,比如“10-35”");
                //创建键盘录入对象
                BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
                //创建随机数获取对象
                Random r=new Random();
                Set<Integer> set=new TreeSet<Integer>();
                Set<Integer> newSet=new TreeSet<Integer>();
                //创建一个文件number.txt
                BufferedWriter bufw=new BufferedWriter(new FileWriter("number.txt"));
               
                //判断输入的数字是不是在指定范围内
                while(true){
                        String line=bufr.readLine();
                        String[] str=line.split("-");
                       
                        int start=Integer.parseInt(str[0]);
                        int end=Integer.parseInt(str[1]);
                       
                        if(end-start>=20){
                                System.out.print("偶数有:");
                                while(set.size()<20){
                                        int num=r.nextInt(end-start+1)+start;
                                        set.add(num);
                                }
                                for (Iterator<Integer> it = set.iterator(); it.hasNext();) {
                                        Integer n = (Integer) it.next();
                                        if((n%2)==0){
                                                //获取偶数
                                                System.out.print(n+" ");
                                        }else{
                                                //获取奇数
                                                                                  
                                           bufw.write(n+"-");
                                        }
                                        bufw.flush();
                                }
                                System.out.println();
                                System.out.println("将奇数写入number.txt 成功");
                               
                        }else {
                                System.out.println("对不起,您输入的区间范围小于20,请重新输入");
                        }
                        bufw.close();
                }
               
        }

}



作者: 香草芭芙    时间: 2017-2-22 16:08
[Java] 纯文本查看 复制代码
import java.util.HashSet;
import java.util.Iterator;

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

    public String name;
    public Integer price;

    public Prize(String name, Integer price) {
        super();
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Prize [name=" + name + ", price=" + price + "]";
    }

}

class MyThread extends Thread {

    private HashSet<Prize> hashSet;

    public MyThread(HashSet<Prize> hashSet) {

        this.hashSet = hashSet;
    }

    @Override
    public void run() {
        while (true) {

            synchronized (Thread.class) {
                Iterator<Prize> iterator = hashSet.iterator();
                if (iterator.hasNext()) {
                    Prize string = iterator.next();
                    System.out.println(this.getName() + string);
                    iterator.remove();
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } else {
                    break;
                }
            }
        }
    }
}

public class Test00 {

    public static HashSet<Prize> hashSet = new HashSet<Prize>();

    public static void main(String[] args) {

        hashSet.add(new Prize("macBookPro", 8988));
        hashSet.add(new Prize("三星note7", 5695));
        hashSet.add(new Prize("小米4", 2688));
        hashSet.add(new Prize("联想P612", 866));
        hashSet.add(new Prize("iphone7", 5688));

        MyThread myThread1 = new MyThread(hashSet);
        MyThread myThread2 = new MyThread(hashSet);
        myThread1.setName("张三 ");
        myThread2.setName("李四 ");
        myThread1.start();
        myThread2.start();
    }
}

作者: 香草芭芙    时间: 2017-2-22 16:09
[Java] 纯文本查看 复制代码
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
import java.util.TreeSet;

/**
*
* 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 成功
*
*/
public class Test01 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入范围大于20的区间...");

        ArrayList<Integer> arrayList = new ArrayList<Integer>();

        String line = "";
        while (true) {
            line = scanner.nextLine();
            boolean matches = line.matches("\\d+-\\d+");

            if (matches == false) {
                System.out.println("输入有误, 请重新输入...");
            } else {
                String[] split = line.split("-");
                int int0 = Integer.parseInt(split[0]);
                int int1 = Integer.parseInt(split[1]);

                int result = int1 - int0;
                if (result < 20) {
                    System.out.println("对不起,您输入的区间范围小于20,请重新输入");
                }else{                    
                    break;
                }

            }
        }

        String[] split = line.split("-");
        for (int i = 0; i < split.length; i++) {
            arrayList.add(Integer.parseInt(split));
        }

        TreeSet<Integer> treeSet = new TreeSet<Integer>();

        Random random = new Random();

        while (treeSet.size() < 20) {

            int nextInt = random.nextInt(arrayList.get(1) - arrayList.get(0)) + arrayList.get(0);
            treeSet.add(nextInt);
        }

        arrayList.clear();
        arrayList.addAll(treeSet);

        System.out.println(arrayList);

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("偶数有:");

        for (Iterator<Integer> iterator = arrayList.iterator(); iterator.hasNext();) {
            Integer integer = iterator.next();
            if (integer % 2 == 0) {
                stringBuilder.append(integer + ",");
                iterator.remove();
            }
        }
        String string = stringBuilder.toString();
        String substring = string.substring(0, string.length() - 1);
        System.out.println(substring);

        Collections.reverse(arrayList);
        System.out.println("奇数有:"+arrayList.toString());
        stringBuilder.delete(0, stringBuilder.length());

        for (int i = 0; i < arrayList.size(); i++) {
            Integer integer = arrayList.get(i);

            if (i == arrayList.size() - 1) {
                stringBuilder.append(integer);
            } else {
                stringBuilder.append(integer + "-");
            }
        }

        FileWriter fileWriter = new FileWriter("number.txt");
        PrintWriter printWriter = new PrintWriter(fileWriter);
        printWriter.println(stringBuilder.toString());
        printWriter.close();
        scanner.close();

    }
}

作者: wthandsome    时间: 2017-5-29 16:14
区间,排序都弄出来了,就是存放当前目录不会!!!
作者: 烽火狼烟    时间: 2017-5-31 07:16
KyneZhk 发表于 2017-2-6 23:00
第二题
[mw_shl_code=applescript,true]package com.demo6;

厉害了我的哥
作者: 烽火狼烟    时间: 2017-5-31 07:18
a469517790 发表于 2017-2-15 15:19
刚刚那遍要求看错了

public class Test4 {

这么多回复 就你的注释最清楚   我们小白才好看懂啊
作者: 小白--zz    时间: 2017-6-6 05:48
第二道题我用了快一个小时才写出来,我估计也挂了




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