Lab1实验过程记录1

Lab1实验过程记录

1.Magic Square

第一题实现MagicSquare数组的检测与实现。题目较为简单,考察的是Java语言的基本函数编写,同时还用到了文件操作,异常处理的相关知识。

 

第一部分,实现MagicSquare数组的检测,内容较为简单。

先通过FileReader打开文件,注意处理相应的FileNotFoundException及IOException,报错并返回。

打开文件后,则按照给定格式对文件中的数组元素进行读取。若正常完成读取,元素将被存储在数组arrays[][]中以便后续计算。对于不满足要求数据存储格式的文件,读取会出错,根据错误类型报错并返回即可。

当全部数组元素正常读取后,则可进一步进行计算。先计算存储数组第一行元素之和,再依次遍历各行,各列及各对角线,将所得元素和与其进行比较,即可完成对MagicSquare数组的判断,根据判断结果返回相应布尔值,完成。

 

第二部分,对给定的generateMagicSquare()方法进行测试,分析实现过程,添加入口参数检测和文件写入操作。

方法的生成逻辑如上图。根据其生成的MagicSquare数组数据的分析,很容易知道其生成逻辑是斜向遍历数组并依次以等差数列赋值,完成一个斜向后跳转到下一个斜向,直至数组元素全部赋值。同时该生成逻辑也限制了数组行列数必须为奇数,否则会导致数组下标越界。

相应的代码注释如下:

public static boolean generateMagicSquare(int n) {

		int[][] magic = new int[n][n]; // 数组下标必为非负数,限制输入n只能为正数
		int row = 0, col = n / 2, i, j, square = n * n; // 从0行 n/2列开始赋值, 首个值为1

		for (i = 1; i <= square; i++) {

			magic[row][col] = i; // 每次为一个元素赋值,后+1
			if (i % n == 0)
				row++; // 当一组(row+col)取模相等(在数组中为斜向的一系列元素)
			else { // 的元素全部完成赋值后,调整到下一行对应的组。此处限制了输入n只能为奇数

				if (row == 0) // 循环下行数row每次减一取模
					row = n - 1;
				else
					row--;

				if (col == (n - 1)) // 循环下列数col每次加一取模
					col = 0;
				else
					col++;
			}
		}

		return true;
	}

文件操作和入口参数检测已略去。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值