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
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]; }