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

像天书一样,看不懂,但好想学
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
11111111111111111111111
回复 使用道具 举报
[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);
				
			}
		}
	}
	
}

回复 使用道具 举报
厉害 个个都是大神啊
回复 使用道具 举报
本帖最后由 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();
		}
		
	}

}


回复 使用道具 举报
[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();
    }
}
回复 使用道具 举报
[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[i]));
        }

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

    }
}
回复 使用道具 举报
区间,排序都弄出来了,就是存放当前目录不会!!!
回复 使用道具 举报
KyneZhk 发表于 2017-2-6 23:00
第二题
[mw_shl_code=applescript,true]package com.demo6;

厉害了我的哥
回复 使用道具 举报
a469517790 发表于 2017-2-15 15:19
刚刚那遍要求看错了

public class Test4 {

这么多回复 就你的注释最清楚   我们小白才好看懂啊
回复 使用道具 举报
第二道题我用了快一个小时才写出来,我估计也挂了
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马