main函数调用问题
hann_sann
2011-11-30
package cn.edu.nciae.diskmanage;
import java.util.Scanner; /** * 用于管理磁道调度,进行操作选择 * * @author pcz * */ public class DiskManage { public static void main(String[] args) { /** * 变量数组a用于存放要访问的磁道, a[0]用于存放初始磁头的位置 */ int[] a = new int[20]; /** * 用来统计请求磁盘调度的I/O请求数目 */ int n = 0; /** * 判断用户的算法选择 */ int m = 0; /** * 创建一个FCFS的对象 */ FCFS fcfs = new FCFS(); SSTF sstf = new SSTF(); SCAN scan = new SCAN(); CSCAN cscan = new CSCAN(); Logic logic = new Logic(); a[0] = 100; a[1] = 55; a[2] = 58; a[3] = 39; a[4] = 18; a[5] = 90; a[6] = 160; a[7] = 150; a[8] = 38; a[9] = 184; n = 9; // int[] b = new int[20] ; // for (int i = 0; i < b.length; i++) { // b[i] = logic.getRandom(1, 200); // System.out.println(b[i]); // } // System.out.println("请输入磁盘请求的个数:"); // try { // Scanner reader = new Scanner(System.in); // n = reader.nextInt(); // } catch (Exception e) { // } // System.out.println("请输入磁盘请求序列:"); // Scanner reader = new Scanner(System.in); // for (int i = 1; i <= n; i++) { // try { // a[i] = reader.nextInt(); // } catch (Exception e) { // } // // } // System.out.println("请输入磁头的初始位置:"); // try { // Scanner re = new Scanner(System.in); // a[0] = re.nextInt(); // } catch (Exception e) { // } // a = logic.Choose(a, n); System.out.println("磁头的初始位置为" + a[0]); System.out.println("磁盘I/O请求表"); System.out.println("编号" + "\t" + "欲访问磁道"); for (int i = 1; i <= n; i++) { System.out.println(i + "\t" + a[i]); } System.out.println(); while (m != -1) { m = logic.Show(); switch (m) { case 1: fcfs.Check(a, n); break; case 2: sstf.Check(a, n); break; case 3: scan.Check(a, n); break; case 4: cscan.Check(a, n); break; default: System.out.println("谢谢使用!"); System.exit(0); } } } } -------------------------------------------------------------------------------------------------------------------------------- package cn.edu.nciae.diskmanage; import java.util.Scanner; public class Logic { /** * 选择界面 返回相应的选项 * * @return m */ public int Show() { int m = 0; System.out.println("********************************************"); System.out.println("提示:磁头的序列范围1~200!磁头从小号到大号寻道!"); System.out.println("请输入相应的选择操作::"); System.out.println("1、先来先服务算法(FCFS)"); System.out.println("2、最短寻道时间优先算法(SSTF)"); System.out.println("3、扫描算法(SCAN)"); System.out.println("4、循环扫描算法(CSCAN)"); System.out.println("5、退出 "); Scanner read = new Scanner(System.in); try { m = read.nextInt(); } catch (Exception e) { } read.close(); return m; } public int[] Choose(int[] a, int n) { int m = 0; System.out.println("*************请选择磁盘序列产生方式********************"); System.out.println("请输入相应的选择操作::"); System.out.println("1、手动输入磁道序列"); System.out.println("2、随机生成磁道序列"); System.out.println("请输入您的操作:"); Scanner read = new Scanner(System.in); try { m = read.nextInt(); } catch (Exception e) { } read.close(); switch (m) { case 1: { Scanner reader = new Scanner(System.in); for (int i = 1; i <=n; i++) { try { a[i] = reader.nextInt(); } catch (Exception e) { } } break; } case 2: { for (int i = 1; i <=n; i++) { a[i] = getRandom(1, 200); System.out.print(a[i] + "\t"); } System.out.println(); break; } } System.out.println("请输入磁头的初始位置:"); try { Scanner re = new Scanner(System.in); a[0] = re.nextInt(); } catch (Exception e) { } return a; } /** * @param start * @param end * @return >= start && <=end 的随机数 end需大于start 否则返回-1 * */ public int getRandom(int start, int end) { if (start > end || start < 0 || end < 0) { return -1; } return (int) (Math.random() * (end - start + 1)) + start; } } 其中logic.Show()只能调用一次 求解 QQ 1214253526 |