java 多线程 赛马

java 多线程 赛马,第1张

package test

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.Scanner

public 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同时作为定义为数组长度接收运动员


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12408390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存