《Java编程语言:原理与范例》课后实验源代码

return i; } } return i; } void insert(int i, int x) { for (int j = a.length - 2; j >= i; j--) { a[j + 1] = a[j]; } a[i] = x; } public static void main(String[] args) { Exp4_2 t = new Exp4_2(); t.print(false); System.out.print(\输入要插入的数:\ Scanner s = new Scanner(System.in); int x = s.nextInt(); int i = t.findInsertLocation(x); if (i == -1) { System.out.println(x + \在数组中已经存在,放弃插入!\ } else { t.insert(i, x); t.print(true); } } }

实验三

/*********************************

3. 找出阶数不小于8的方阵的鞍点值及位置(鞍点值在该行上最大、该列上最小),若无鞍点则提示。

**********************************/ package ch05;

import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Scanner; /**

* 鞍点对象类 */

class AnDian { private int row; // 鞍点所在行下标 private int col; // 鞍点所在列下标 private int value; // 鞍点值 // 完全构造方法 public AnDian(int row, int col, int value) { this.row = row; this.col = col; this.value = value; } // getters and setters public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } /**

* 测试类(整体上是若干个并列的2重循环,时间复杂度较3重循环低) */

public class Exp4_3 {

int[][] a; // 矩阵 int maxOfRows[]; // 存放每行的最大值 int minOfCols[]; // 存放每列的最小值 final int LIMIT = 3; // 矩阵元素值的上限(为测试方便此处写死,也可在运行时由用户输入) // 初始化矩阵 void initArray() { Scanner scanner = new Scanner(System.in); System.out.print(\输入矩阵行数:\ int m = scanner.nextInt(); // 矩阵行数 System.out.print(\输入矩阵列数:\ int n = scanner.nextInt(); // 矩阵列数 // 构造各数组 a = new int[m][n]; maxOfRows = new int[m]; minOfCols = new int[n]; // 以随机数填充矩阵 Random random = new Random(); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { a[i][j] = random.nextInt(LIMIT); } } // 记录每行的最大值 int max; for (int i = 0; i < a.length; i++) { max = a[i][0]; for (int j = 1; j < a[i].length; j++) { if (max < a[i][j]) { max = a[i][j]; } } maxOfRows[i] = max; } // 记录每列的最小值 int min; for (int j = 0; j < a[0].length; j++) { min = a[0][j]; for (int i = 1; i < a.length; i++) {

if (min > a[i][j]) { min = a[i][j]; } } minOfCols[j] = min; } } // 打印矩阵 void printArray() { System.out.println(\得到的矩阵为:\ for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.printf(\ } System.out.println(); } } // 找鞍点(可能有多个),返回类型为线性表类型(List),尖括号语法为泛型,表示线性表的元素为AnDian对象,具体看教材 List findAnDian() { List anDians = new ArrayList(); // 构造线性表对象 for (int i = 0; i < a.length; i++) { // 扫描矩阵中的每个元素 for (int j = 0; j < a[i].length; j++) { // 是当前行最大且当前列最小 if (a[i][j] == maxOfRows[i] && a[i][j] == minOfCols[j]) { AnDian p = new AnDian(i, j, a[i][j]); // 构造AnDian对象 anDians.add(p); // 加入AnDian对象到线性表 } } } return anDians; // 返回线性表 } // 测试入口 public static void main(String[] args) { Exp4_3 o = new Exp4_3(); o.initArray(); o.printArray(); List anDians = o.findAnDian(); System.out.println(\ if (anDians.size() == 0) { // 返回的线性表元素个数为0

System.out.println(\没有鞍点。\ } else { int i = 0; for (AnDian e : anDians) { // 迭代性for循环的语法也可用于线性表类型 System.out.printf(\鞍点%-4d:a[%-3d][%-3d] = %-8d\\n\++i, e.getRow(), e.getCol(), e.getValue()); } } } }

实验四

/*********************************

4. 编写如下图所示的程序以模拟命令行的copy命令。 **********************************/ package ch05;

public class Exp4_4 { public static void main(String[] args) { if (args.length != 2) { System.err.println(\命令语法不正确,使用格式为:java Exp4_4 要复制的文件 复制到的路径\ return; } System.out.println(\成功将\\\复制到 \\\。\ } }

实验五/*********************************

5. 输出如上图所示的循环移位方阵(第一行存于一维数组,循环右移该行元素一个位置以产生下一行,以此类推)。

7 4 8 9 1 5 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7

**********************************/ package ch05;

public class Exp4_5 { void shift(int[] a) { int last = a[a.length - 1]; for (int i = a.length - 2; i >= 0; i--) { a[i + 1] = a[i]; }

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4