⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mylistener.java

📁 用java写的时间片轮转法
💻 JAVA
字号:
package os.whb;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayDeque;

public class MyListener implements ActionListener {
	ShowWin sw = null;
	int index1 = 0;

	public MyListener(ShowWin sw) {
		this.sw = sw;
	}

	public void actionPerformed(ActionEvent e) {
		// int index1 = 0;
		if (e.getSource() == sw.b_add) {
			int ID = 0;
			int cometime = 0;
			int runtime = 0;
			ID = Integer.parseInt(sw.进程号.getText());
			cometime = Integer.parseInt(sw.进入时间.getText());
			runtime = Integer.parseInt(sw.执行所需时间.getText());
			JC jc = new JC(ID, cometime, runtime);
			sw.jc1[index1] = jc;
			sw.进程号.setText(null);
			sw.进入时间.setText(null);
			sw.执行所需时间.setText(null);
			sw.t1.setText(null);
			for (int i = 0; i <= index1; i++) {
				sw.t1.append("进程号:" + sw.jc1[i].ID + " ");
				sw.t1.append("到达时间:" + sw.jc1[i].cometime + " ");
				sw.t1.append("执行所需时间" + sw.jc1[i].runtime + " ");
				sw.t1.append("\n");
			}
			index1++;
		} else if (e.getSource() == sw.b_FCFS) {
			sw.t2.setText(null);
			double datime = 0;
			double atime = 0;
			int k = 0;
			for (int i = 0; i < sw.jc1.length; i++) {
				if (sw.jc1[i] != null) {
					k++;
				}
			}
			JC[] jc2 = new JC[k];
			for (int i = 0; i < sw.jc1.length; i++) {
				if (sw.jc1[i] != null) {
					jc2[i] = sw.jc1[i];
				}
			}
			JC jc = null;
			for (int i = 0; i < (jc2.length) - 1; i++) {
				for (int j = i + 1; j < jc2.length; j++) {
					if (jc2[i].cometime > jc2[j].cometime) {
						jc = jc2[i];
						jc2[i] = jc2[j];
						jc2[j] = jc;
					}
				}
			}
			sw.t2.append("进程的执行顺序为:");
			for (int i = 0; i < jc2.length; i++) {
				sw.t2.append(jc2[i].ID + "**");
			}
			sw.t2.append("\n");
			jc2[0].begintime = jc2[0].cometime;
			jc2[0].overtime = jc2[0].begintime + jc2[0].runtime;
			jc2[0].ztime = jc2[0].overtime - jc2[0].cometime;
			jc2[0].dztime = jc2[0].ztime / jc2[0].runtime;
			atime = atime + jc2[0].ztime;
			datime = datime + jc2[0].dztime;
			for (int i = 1; i < jc2.length; i++) {
				if (jc2[i].cometime < jc2[i - 1].overtime) {
					jc2[i].begintime = jc2[i - 1].overtime;
				} else
					jc2[i].begintime = jc2[i].cometime;
				// System.out.println(jc2[i].begintime);
				jc2[i].overtime = jc2[i].begintime + jc2[i].runtime;
				// System.out.println(jc2[i].overtime);
				jc2[i].ztime = jc2[i].overtime - jc2[i].cometime;
				// System.out.println(jc2[i].ztime);
				jc2[i].dztime = jc2[i].ztime / jc2[i].runtime;
				// System.out.println(jc2[i].dztime);
				atime = atime + jc2[i].ztime;
				datime = datime + jc2[i].dztime;
			}
			atime = atime / jc2.length;
			datime = datime / jc2.length;
			sw.t2.append("平均周转时间为:");
			sw.t2.append("" + atime);
			sw.t2.append("\n");
			sw.t2.append("平均带权周转时间为:");
			sw.t2.append("" + datime);
			sw.t2.append("\n");
		} else if (e.getSource() == sw.b_HRN) {
			sw.t2.setText(null);
			double datime = 0;
			double atime = 0;
			int k = 0;
			for (int i = 0; i < sw.jc1.length; i++) {
				if (sw.jc1[i] != null) {
					k++;
				}
			}
			JC[] jc2 = new JC[k];
			for (int i = 0; i < sw.jc1.length; i++) {
				if (sw.jc1[i] != null) {
					jc2[i] = sw.jc1[i];
				}
			}
			JC jc = null;
			for (int i = 1; i < jc2.length; i++) {
				if (jc2[0].cometime > jc2[i].cometime) {
					jc = jc2[0];
					jc2[0] = jc2[i];
					jc2[i] = jc;
				}
			}
			jc2[0].begintime = jc2[0].cometime;
			jc2[0].overtime = jc2[0].begintime + jc2[0].runtime;
			jc2[0].ztime = jc2[0].overtime - jc2[0].cometime;
			jc2[0].dztime = jc2[0].ztime / jc2[0].runtime;
			atime = atime + jc2[0].ztime;
			datime = datime + jc2[0].dztime;
			for (int i = 1; i < jc2.length - 1; i++) {
				for (int j = i; j < jc2.length; j++) {
					if (jc2[j].cometime < jc2[i - 1].overtime) {
						jc2[j].wtime = jc2[i - 1].overtime - jc2[j].cometime;
						jc2[j].R = 1 + jc2[j].wtime / jc2[j].runtime;
					} else {
						jc2[j].R = 1;
					}
				}
				/*
				 * for(int m = 0;m<jc2.length;m++){
				 * System.out.println(jc2[m].R); }
				 */
				for (int j = i + 1; j < jc2.length; j++) {
					if (jc2[i].R < jc2[j].R) {
						jc = jc2[i];
						jc2[i] = jc2[j];
						jc2[j] = jc;
					}
				}

				if (jc2[i].cometime < jc2[i - 1].overtime) {
					jc2[i].begintime = jc2[i - 1].overtime;
				} else
					jc2[i].begintime = jc2[i].cometime;
				// System.out.println(jc2[i].begintime);
				jc2[i].overtime = jc2[i].begintime + jc2[i].runtime;
				// System.out.println(jc2[i].overtime);
				jc2[i].ztime = jc2[i].overtime - jc2[i].cometime;
				// System.out.println(jc2[i].ztime);
				jc2[i].dztime = jc2[i].ztime / jc2[i].runtime;
				// System.out.println(jc2[i].dztime);
				atime = atime + jc2[i].ztime;
				datime = datime + jc2[i].dztime;
			}
			if (jc2[k - 1].cometime < jc2[k - 2].overtime) {
				jc2[k - 1].begintime = jc2[k - 2].overtime;
			} else
				jc2[k - 1].begintime = jc2[k - 1].cometime;
			jc2[k - 1].overtime = jc2[k - 1].begintime + jc2[k - 1].runtime;
			jc2[k - 1].ztime = jc2[k - 1].overtime - jc2[k - 1].cometime;
			jc2[k - 1].dztime = jc2[k - 1].ztime/jc2[k - 1].runtime;
			atime = atime + jc2[k - 1].ztime;
			datime = datime + jc2[k - 1].dztime;

			atime = atime/jc2.length;
			datime = datime/jc2.length;
			sw.t2.append("进程的执行顺序为:");
			for (int i = 0; i < jc2.length; i++) {
				sw.t2.append(jc2[i].ID + "**");
			}
			sw.t2.append("\n");
			sw.t2.append("平均周转时间为:");
			sw.t2.append("" + atime);
			sw.t2.append("\n");
			sw.t2.append("平均带权周转时间为:");
			sw.t2.append("" + datime);
			sw.t2.append("\n");
		} else if (e.getSource() == sw.b_TR) {
			sw.t2.setText(null);
			double datime = 0;
			double atime = 0;
			double time = 0;
			int index = 1;
			int k = 0;
			ArrayDeque<JC> jcq = new ArrayDeque<JC>();
			for (int i = 0; i < sw.jc1.length; i++) {
				if (sw.jc1[i] != null) {
					k++;
				}
			}
			JC[] jc2 = new JC[k];
			for (int i = 0; i < sw.jc1.length; i++) {
				if (sw.jc1[i] != null) {
					jc2[i] = sw.jc1[i];
					jc2[i].mtime = jc2[i].runtime;
				}
			}
			JC jc = null;
			for (int i = 0; i < (jc2.length) - 1; i++) {
				for (int j = i + 1; j < jc2.length; j++) {
					if (jc2[i].cometime > jc2[j].cometime) {
						jc = jc2[i];
						jc2[i] = jc2[j];
						jc2[j] = jc;
					}
				}
			}
			time = jc2[0].cometime;
			jcq.add(jc2[0]);
			JC myjc = null;
			myjc = jcq.element();
			sw.t2.append("进程的执行顺序为:");
			while (myjc != null || time < 1000) {
				if (myjc != null) {
					sw.t2.append(myjc.ID + "**");
					myjc.mtime = myjc.mtime - 1;
					if (myjc.mtime == 0) {
						time++;
						myjc.overtime = time;
						myjc.ztime = myjc.overtime - myjc.cometime;
						myjc.dztime = myjc.ztime/myjc.runtime;
						//System.out.println(myjc.ztime+"%%%"+myjc.dztime+"%%%"+myjc.runtime);
						atime = atime + myjc.ztime;
						datime = datime + myjc.dztime;
						jcq.poll();
						if (!jcq.isEmpty()) {
							myjc = jcq.element();
						} else {
							myjc = null;
						}
					} else {
						time++;
						for (int i = index; i < k; i++) {
							if (jc2[index].cometime <= time) {
								jcq.add(jc2[index]);
								index++;
							}
						}
						jcq.poll();
						jcq.add(myjc);
						myjc = jcq.element();
					}
					//time++;
					/*
					 * for (int i = index; i < k; i++) { if (jc2[index].cometime <=
					 * time) { jcq.add(jc2[index]); index++; } }
					 */
				} else{
					time++;
				for (int i = index; i < k; i++) {
					if (jc2[index].cometime <= time) {
						jcq.add(jc2[index]);
						index++;
					}
				}
				}
				if (!jcq.isEmpty()) {
					myjc = jcq.element();
				} else {
					myjc = null;
				}
			}
			//System.out.println(k);
			atime = atime / k;
			datime = datime / k;
			sw.t2.append("\n");
			sw.t2.append("平均周转时间为:");
			sw.t2.append("" + atime);
			sw.t2.append("\n");
			sw.t2.append("平均带权周转时间为:");
			sw.t2.append("" + datime);
			sw.t2.append("\n");

		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -