软件构造——Lab1

①判断幻方:
我采取的读文件的方法时创建一个输出流,将文件中的数据输出到一个byte【】数组中。将这个数据流按照UTF-8的格式存入一个String变量中。之后调用String的split方法,将其按“\n”分割,这样就得到了每一行的数据,获取String数组的长度即为行数,接下来对每一行分别按小数点和负号进行split,如果长度发生改变,说明含有小数或负数,可以直接返回false。
如果没有,则继续对每一行按“\t”split,如果分割后期长度不等于行数,则行列数不等或不是矩阵,直接返回false。
如果相等,则将数一次存入一个int二维数组的相应位置,最后计算每行每列和两个对角线上的元素和是否相等即可
②向文件输出幻方:
第一次编写时,我使用了如下语句
PrintStream ps=new PrintStream(“src/P1/txt/6.txt”); //创建一个打印输出流,输出到6.txt
System.setOut(ps); //把创建的打印输出流赋值给系统(系统下次向PS输出)
通过将下一次输出转向PS以达到向txt.6输入的目的,但我发现之后没办法改回来,之后每一次输出都向txt.6输出了,所以我放弃了这个办法。之后我采用了常规方法,创建一个输入流,用write方法逐行写入。
③计算凸包
我采用的方法是调用之前写好的方法,从最左边的点开始,每次搜索需要转向角最小的点,即为下一个凸包点,这样顺时针搜索一圈,回到初始角时结束,此时可得到一个凸包。
④计算最短路径
我采用的用于计算两点最短路径的方法为广度优先搜索,首先从a点开始,其深度deep记为0,遍历所有邻接点,由a遍历到的点存入队列,记为已访问,深度deep为a的深度deep加1,即为1,在从中一个个遍历邻接点并记录深度,直到找到点b,此时b点的深度为a,b两点间的最短距离。如果队列为空还未找到,则返回-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值