import java.util.ArrayList
import java.util.Arrays
import java.util.Collections
import java.util.Comparator
import java.util.HashMap
import java.util.List
import java.util.Map
import java.util.Set
import java.util.SortedMap
import java.util.TreeMap
import sun.util.logging.resources.logging
/**
* 2010-1-17 下午03:08:52 Piaolj
*/
public class Racing implements Runnable {
String str
static Map horses = new TreeMap()/磨态/ 定义一个全局的Map存放5个马的名字和时间
static int count = 0// 用于判断县城是否全部结束
static boolean flag = true// 后面用while(flag)判断count是否为0,如果有兴趣,可以起另外一个线程完成此任务
public Racing(String string) {
// TODO Auto-generated constructor stub
this.str = string
}
public static void main(String[] args) {
Racing ra1 = new Racing("No.1 Horse")
Racing ra2 = new Racing("No.2 Horse")
Racing ra3 = new Racing("No.3 Horse")
Racing ra4 = new Racing("No.4 Horse")
Racing ra5 = new Racing("No.5 Horse")
Racing checkingThread = new Racing("checkingThread")
Thread t1 = new Thread(ra1)
Thread t2 = new Thread(ra2)
Thread t3 = new Thread(ra3)
Thread t4 = new Thread(ra4)
Thread t5 = new Thread(ra5)
t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
while (flag) {
if (count == 0)// 所有线程结束
{
flag = false
}
}
// 排序
List infoIds = new ArrayList(horses.entrySet())
Collections.sort(infoIds, new Comparator<Map.Entry>() {
public int compare(Map.Entry o1, Map.Entry o2) {// 定义了比较的规则,因为这腔盯里是按map的value排序的
Long tmp = Long.parseLong(o1.getValue().toString())
- Long.parseLong(o2.getValue().toString())
return tmp.intValue()
}
})
System.out.println("伍游和输出马的名次:")
System.out.println()
for (int i = 0i <infoIds.size()i++) {
String id = infoIds.get(i).toString()
System.out.println(id)
}
}
public void run() {
// TODO Auto-generated method stub
int CircuitLength = 1000
int breakpoint = 200
int tmpint = 200
long Withtime
count = count + 1// 执行了一个线程,正在执行的线程数加1
// System.out.println(Thread.currentThread().getId())
for (int i = 0i <CircuitLength + 1i++) {
long start = System.currentTimeMillis()
if (i == breakpoint) {
int sleeping = (int) (Math.random() * 5000)
try {
Thread.sleep(sleeping)
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
breakpoint = breakpoint + tmpint
}
if (i == CircuitLength) {
System.out.print(str + "\t" + "\t")
long end = System.currentTimeMillis()
Withtime = (end - start)
System.out.println("With time is:\t" + Withtime)
// 当每匹马跑完将马的时间的马的名称放入map中
horses.put(str, Withtime)
}
}
count = count - 1// 执行完了一个线程,线程数减1
}
}
时间比较少,写的比较草,呵呵 加了点注释,要是有问题可以发短消息
输出结果:
No.4 Horse With time is: 888
No.3 Horse With time is: 3042
No.5 Horse With time is: 1921
No.2 Horse With time is: 4346
No.1 Horse With time is: 2831
输出马的名次:
No.4 Horse=888
No.5 Horse=1921
No.1 Horse=2831
No.3 Horse=3042
No.2 Horse=4346
import java.util.Scannerpublic class Test{
携绝歼 public static void main(String[] args){
Test ts=new Test()
Scanner sc=new Scanner(System.in)
System.out.println("输入10个同学的名字和成绩(格式如“名字-成绩”),中间以空格隔开")
//测试数据 101-76 102-54 103-67 104-83 105-95 106-86 107-60 108-70 109-89 110-47
String s = sc.nextLine()
String[] m = s.split(" ") //split()拆分字符串
String[] n = ts.paixu(m)
if(n!=null){
System.out.println("下面是成绩排名(分数从高到低):")
System.out.printf("%-28s%-28s%-28s","排名 ","名字","分数")//printf()格式化输出
System.out.println()
for (int i=0i<n.lengthi++){
System.out.printf("%-12s%-12s%-12s",(i+1)," "+n[i].split("-")[0]," "+n[i].split("-")[1])
System.out.println()
}
}
}
public String[] paixu(String str[]){
int i
int k
float[] array = new float[str.length]
try {
for (i=0i<str.lengthi++)
array[i] = Float.parseFloat(str[i].split("-")[1])//获取字符串中的成绩部分并转换为小数
}
catch (Exception ex) {
System.out.println("您的输入格式不正确!正确格式为:“名字-成绩 名字-成绩”。")
return null
}
for (i=0i<array.lengthi++){
for (k=0k<array.length-1-ik++){
辩冲 if (array[k]<array[k + 1]) {
float temp=array[k]array[k]=array[k+1]array[k+1]=temp
String tempStr=str[k]str[k]=str[k+1]str[k+1]=tempStr
}
}
}
return str
}
}
忘了是自定义人数,输入算法哪里改一下宏绝就可以了,加一个NUMBER同时作为定义为数组长度接收运动员
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)