最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Java程序模擬實(shí)現(xiàn)新冠病毒傳染效果

 更新時(shí)間:2020年08月18日 17:13:35   作者:魯先生.  
這篇文章主要介紹了用Java程序模擬實(shí)現(xiàn)新冠病毒傳染效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

簡單介紹

2020年注定是不平凡的一年,新冠肺炎肆虐全球,傳染性特別強(qiáng),目前全球感人人數(shù)還在逐漸攀升,作為中華兒女特別感謝政府作出的努力,非常感謝并致敬醫(yī)護(hù)人員,是他們的努力為我們創(chuàng)造安全的環(huán)境,向你們致敬!

模擬方案

以下是程序粗略的模擬病毒傳染過程,具體方案如下:

首先需要構(gòu)造一個(gè)200 * 200的格子界面有四種不同的顏色狀態(tài)標(biāo)記著程序執(zhí)行的過程程序執(zhí)行10次,初始化格子也就是0的時(shí)候,需要在整個(gè)格子最中心的100個(gè)格子標(biāo)記為紅色,剩余數(shù)據(jù)隨機(jī)抽取四千(且不能重復(fù))標(biāo)記為黑色,其余沒有標(biāo)記的為白色。之后第2次到第10次的所有數(shù)據(jù)隨機(jī)轉(zhuǎn)化為不同顏色

#說明

紅色代表已確診黑色代表已死亡白色代表隔離期綠色代表未感染

模擬結(jié)果

新冠病毒擴(kuò)散圖

執(zhí)行源碼

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

import javax.swing.JFrame;

public class DrawSee extends JFrame {

	private static final long serialVersionUID = -3469074514775590338L;
	private static final int sx = 20;// 游戲區(qū)域200*200方塊的起始橫坐標(biāo)
	private static final int sy = 40;// 游戲區(qū)域200*200方塊的起始縱坐標(biāo)
	private static final int w = 3;// 每個(gè)小方格的邊長
	private static final int rw = 600;// 游戲區(qū)域200*200方塊的邊長

	private Graphics jg;
	private Color rectColor = new Color(0xf5f5f5);
	/**
	* DrawSee構(gòu)造方法
	*/
	public DrawSee() {
		Container p = getContentPane();
		setBounds(100, 100, 650, 650);
		setVisible(true);
		p.setBackground(rectColor);
		setLayout(null);
		setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		try {
			Thread.sleep(500);
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 獲取專門用于在窗口界面上繪圖的對象
		jg = this.getGraphics();
		// 繪制游戲區(qū)域
		paintComponents(jg);
	}

	/**
	* 開始
	*/
	public void paintComponents(Graphics g) {
		try {
			// 設(shè)置線條顏色為紅色
			g.setColor(Color.WHITE);

			// 繪制外層矩形框
			g.drawRect(sx, sy, rw, rw);

			int N = 200;
			/*
			* 繪制水平200個(gè),垂直200個(gè)方格。 即水平方向199條線,垂直方向199條線, 外圍四周4條線已經(jīng)畫過了,不需要再畫。
			*/
			for (int i = 1; i < N; i++) {
				// 繪制第i條豎直線
				g.drawLine(sx + (i * w), sy, sx + (i * w), sy + rw);
				// 繪制第i條水平線
				g.drawLine(sx, sy + (i * w), sx + rw, sy + (i * w));
			}
			// 填寫第i行從第1個(gè)方格到第N個(gè)方格里面的背景顏色(方格序號(hào)從0開始)
			int[][] s = new int[N][N];
			int sl = s.length;
			List<Object> list1 = new ArrayList<Object>();
			HashMap<String, String> map = new HashMap<String, String>();
			for (int t = 0; t < 70; t++) {
				if (t == 0) {
					t0(N, sl, s);
				} else {
					if (t < 60) {
						tn(N, sl, s, map, list1, t);
					}
					dataChange(list1, s, t);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	* 數(shù)據(jù)是保留10個(gè)步長之后并根據(jù)round 向其他狀態(tài)轉(zhuǎn)變
	* 
	* @param list
	* @param s
	* @param t
	*/
	private void dataChange(List<Object> list, int[][] s, int t) {
		int a1 = 0, a2 = 0, a3 = 0, a4 = 0;
		for (int x = list.size() - 1; x >= 0; x--) {
			a3 = Integer.parseInt(list.get(x).toString().split("a")[2].toString());
			if (a3 - t > 1) {
				a1 = Integer.parseInt(list.get(x).toString().split("a")[0].toString());
				a2 = Integer.parseInt(list.get(x).toString().split("a")[1].toString());
				a4 = Integer.parseInt(list.get(x).toString().split("a")[3].toString());

				// 修改概率
				if (a4 > 0 && a4 <= 3000) {
					s[a1][a2] = -1;
				} else if (a4 > 3000 && a4 <= 9000) {
					s[a1][a2] = 2;
				} else {
					s[a1][a2] = 1;
				}
				list.remove(x);
			}
		}

	}

	/**
	* tn時(shí)刻數(shù)據(jù)
	* 
	* @param N
	* @param slt
	* @param sl
	* @param s
	* @param map
	* @param map1
	* @param list1
	* @param t
	*/
	private void tn(int N, int sl, int[][] s, HashMap<String, String> map, List<Object> list1, int t) {
		int slt = 0;
		int round = 0;
		HashMap<String, String> map1 = new HashMap<String, String>();
		for (int k = 0; k < s.length; k++) {
			slt = s[k].length;
			for (int k2 = 0; k2 < slt; k2++) {
				// 狀態(tài)為1記錄并且去除步長在10以內(nèi)的重復(fù)數(shù)據(jù) 放到list1中
				if (s[k][k2] == 1) {
					round = new Random().nextInt(10000);
					if (map.containsKey(k + "a" + k2 + "a")) {
						if (t - Integer.parseInt(map.get(k + "a" + k2 + "a").split("a")[2].toString()) > 10) {
							map.put(k + "a" + k2 + "a", k + "a" + k2 + "a" + t + "a" + round + "a");
							map1.put(k + "a" + k2 + "a", k + "a" + k2 + "a" + t + "a" + round + "a");
							list1.add(map1.get(k + "a" + k2 + "a"));
						}
					} else {
						map.put(k + "a" + k2 + "a", k + "a" + k2 + "a" + t + "a" + round + "a");
						map1.put(k + "a" + k2 + "a", k + "a" + k2 + "a" + t + "a" + round + "a");
						list1.add(map1.get(k + "a" + k2 + "a"));
					}

				}

				// 狀態(tài)為0向其他狀態(tài)改變
				if (s[k][k2] == 0) {
					round = new Random().nextInt(10000);
					// 修改概率
					if (round > 0 && round <= 1000) {
						s[k][k2] = -1;
					} else if (round > 9000 && round <= getrNum(10000, 0)) {
						System.out.println("round:" + round);
						s[k][k2] = 1;
					} else if (round > 1000 && round <= 9000) {
						s[k][k2] = 2;
					} else {
						s[k][k2] = 0;
					}
				}

				// 狀態(tài)為-1向其他狀態(tài)改變
				if (s[k][k2] == -1) {
					round = new Random().nextInt(10000);
					// 修改概率
					if (round > 0 && round <= 4000) {
						s[k][k2] = 0;
					} else {
						s[k][k2] = -1;
					}
				}

				// 狀態(tài)為2向其他狀態(tài)改變
				if (s[k][k2] == 2) {
					round = new Random().nextInt(10000);
					// 修改概率
					if (round > 0 && round <= 1000) {
						s[k][k2] = 0;
					} else {
						s[k][k2] = 2;
					}
				}

			}
		}
		// 上色
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				color(i, j, s);
			}
		}
		map1 = null;
	}

	/**
	* t0時(shí)刻
	* 
	* @param N
	* @param slt
	* @param sl
	* @param s
	*/
	private void t0(int N, int sl, int[][] s) {
		int slt = 0, a1 = 0, a2 = 0;
		List<Object> list = new ArrayList<Object>();
		// 初始化1的值
		for (int k = 0; k < sl; k++) {
			slt = s[k].length;
			for (int k2 = 0; k2 < slt; k2++) {
				if (k >= 80 && k < 100 && k2 >= 80 && k2 < 100) {
					s[k][k2] = 1;
				} else {
					// 剩余數(shù)據(jù)
					list.add(k + "a" + k2 + "a");
				}
			}
		}
		// 剩余數(shù)據(jù)全部轉(zhuǎn)換為0
		for (int x = 0; x < list.size(); x++) {
			a1 = Integer.parseInt(list.get(x).toString().split("a")[0].toString());
			a2 = Integer.parseInt(list.get(x).toString().split("a")[1].toString());
			s[a1][a2] = 0;
		}

		// 在為0 的基礎(chǔ)上抽取4000 數(shù)據(jù)賦值為-1
		Set<Integer> sets = getRandom(4000, list.size());
		for (Integer itg : sets) {
			a1 = Integer.parseInt(list.get(itg).toString().split("a")[0].toString());
			a2 = Integer.parseInt(list.get(itg).toString().split("a")[1].toString());
			s[a1][a2] = -1;
		}

		// 上色
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				color(i, j, s);
			}
		}
	}

	/**
	* 講制定小方格設(shè)置為指定背景顏色
	* 
	* @param cx
	*      方格的水平方向序號(hào)
	* @param cy
	*      方格的垂直方向序號(hào)
	* @param color
	*/
	private void setGrid(int cx, int cy, Color color) {
		// 將繪圖對象設(shè)置為灰色,后面會(huì)將方格背景設(shè)置為此顏色
		jg.setColor(color);
		/**
		* 方格上繪制一個(gè)小一點(diǎn)的矩形,矩形背景顏色為color,
		*/
		jg.fillRect(sx + (cx * w), sy + (cy * w), w - 1, w - 1);

	}

	/**
	* 根據(jù)nlength 長度 產(chǎn)生 num 隨機(jī)數(shù)(并且不重復(fù))
	* 
	* @param num
	* @param nlength
	* @return
	*/
	public Set<Integer> getRandom(int num, int nlength) {
		if (nlength < num) {
			return null;
		}
		int index = 0;
		Set<Integer> set = new HashSet<Integer>();
		for (int i = 0; i < nlength; i++) {
			index = (int) (Math.random() * nlength);
			if (set.size() >= 4000) {
				break;
			} else {
				set.add(index);
			}

		}
		return set;
	}

	/**
	* main
	* 
	* @param args
	*/
	public static void main(String[] args) {
		new DrawSee();
	}

	/**
	* 隨機(jī)生成最小到最大的數(shù)據(jù)
	* 
	* @param max
	* @param min
	* @return
	*/
	private int getrNum(int max, int min) {
		Random random = new Random();
		return random.nextInt(max) % (max - min + 1) + min;

	}

	/**
	* 設(shè)置每種狀態(tài)的背景顏色
	* 
	* @param i
	* @param j
	* @param s
	*/
	private void color(int i, int j, int[][] s) {
		if (s[i][j] == -1) {
			// 狀態(tài)為空
			setGrid(i, j, Color.BLACK);
		} else if (s[i][j] == 0) {
			// 易感冒
			setGrid(i, j, Color.WHITE);
		} else if (s[i][j] == 1) {
			// 感染者
			setGrid(i, j, Color.RED);
		} else if (s[i][j] == 2) {
			// 恢復(fù)者
			setGrid(i, j, Color.GREEN);
		}
	}

}

說明

本文只做學(xué)習(xí)參考,如有任何不準(zhǔn)確的地方歡迎指正。

到此這篇關(guān)于使用Java程序模擬實(shí)現(xiàn)新冠病毒傳染效果的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)新冠病毒傳染內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 商戶PC端接入支付寶支付的實(shí)現(xiàn)方法

    java 商戶PC端接入支付寶支付的實(shí)現(xiàn)方法

    這篇文章主要介紹了java 商戶PC端接入支付寶支付的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java 中Comparable與Comparator詳解與比較

    java 中Comparable與Comparator詳解與比較

    這篇文章主要介紹了java 中Comparable與Comparator詳解與比較的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • MyBatis-Plus框架整合詳細(xì)方法

    MyBatis-Plus框架整合詳細(xì)方法

    MyBatis-Plus是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生這篇文章主要介紹了MyBatis-Plus框架整合,需要的朋友可以參考下
    2022-04-04
  • RocketMQ源碼解析topic創(chuàng)建機(jī)制詳解

    RocketMQ源碼解析topic創(chuàng)建機(jī)制詳解

    這篇文章主要為大家介紹了RocketMQ源碼解析topic創(chuàng)建機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java實(shí)現(xiàn)輸入輸出流代碼分享

    java實(shí)現(xiàn)輸入輸出流代碼分享

    這篇文章主要介紹了java實(shí)現(xiàn)輸入輸出流代碼分享的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • Spring?@Bean?修飾方法時(shí)注入?yún)?shù)的操作方法

    Spring?@Bean?修飾方法時(shí)注入?yún)?shù)的操作方法

    對于 Spring 而言,IOC 容器中的 Bean 對象的創(chuàng)建和使用是一大重點(diǎn),Spring 也為我們提供了注解方式創(chuàng)建 bean 對象:使用 @Bean,這篇文章主要介紹了Spring?@Bean?修飾方法時(shí)如何注入?yún)?shù),需要的朋友可以參考下
    2023-10-10
  • Java利用Dijkstra和Floyd分別求取圖的最短路徑

    Java利用Dijkstra和Floyd分別求取圖的最短路徑

    本文主要介紹了圖的最短路徑的概念,并分別利用Dijkstra算法和Floyd算法求取最短路徑,最后提供了基于鄰接矩陣和鄰接表的圖對兩種算法的Java實(shí)現(xiàn)。需要的可以參考一下
    2022-01-01
  • Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

    Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Mybatis中傳遞多個(gè)參數(shù)的4種方法,并且介紹了關(guān)于使用Mapper接口時(shí)參數(shù)傳遞方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題

    解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題

    這篇文章主要介紹了解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 簡單易懂的java8新特性之lambda表達(dá)式知識(shí)總結(jié)

    簡單易懂的java8新特性之lambda表達(dá)式知識(shí)總結(jié)

    一直想針對lambda表達(dá)式作一個(gè)總結(jié),借助于這次公司安排的考試作一個(gè)入門式的總結(jié),對正在學(xué)習(xí)java的小伙伴們非常有幫助,需要的朋友可以參考下
    2021-05-05

最新評論

故城县| 高唐县| 陵水| 苏尼特右旗| 卓资县| 呼玛县| 双辽市| 岫岩| 息烽县| 依安县| 固镇县| 湾仔区| 施秉县| 信丰县| 五台县| 大丰市| 安丘市| 五家渠市| 福贡县| 斗六市| 乌拉特后旗| 镇坪县| 晋宁县| 杭锦旗| 堆龙德庆县| 镇巴县| 囊谦县| 山东| 浑源县| 英山县| 绵竹市| 横山县| 泸溪县| 建昌县| 土默特左旗| 平顶山市| 于都县| 东辽县| 平遥县| 云林县| 永嘉县|