您的位置:首页 > 其它

软件构造实验一的总结

2019-03-10 22:51 330 查看

哈工大软件构造Lab1@张大兴1163300619十班

软件构造实验一的总结

P1

因为不让粘代码,所以我只总结我在做实验的时候认为有用的点hhhh。

这个实验就是要求我们从文件中读入矩阵,先判断他在格式上是否合理,然后判断他的行,列,对角线上元素之和是否相等。有一些可能会有用的要点。
1.读文件。按行读取,这个可以当作套路一样的模板,记录到自己的小本本上hhh

BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileName) //filename是一个字符串,是文本的路径
)
);
String line;
while ( (line = in.readLine())  != null )
{
....
}

2.写文件。也有一个我觉得好用的模板~

PrintWriter out1 = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("src/P1/txt/6.txt")
)
)
);
//out1.print();  out1.println();  完全当作在屏幕上输出就行啦
out1.close();  //千万不要忘了关文件哦

3.按行从文件中读入矩阵的内容,对于每一行,我按照"\t"进行split,得到一个字符串数组,然后我把得到的所有数组保存到一个Arrilist容器内(容器的每一项都是一个字符串数组)
4.这个是判断异常的模板

catch(ArrayIndexOutOfBoundsException e){

System.out.println("越界了");
return false;

}

5.之后便是繁琐的处理数据了。需要用到Integer.valueOf(s),把字符串转换成整数。

P2

这个实验极大地考察我们的英语水平,建议没事多翻阅高中英语必修一到必修五以提高知识水平。
1.calculateBearingToPoint函数实现起来需要用到Math.atan2(x1,y1);输入向量x1,y1返回这个向量和y轴正方向的夹角(当然光是这样是不符合实验要求的,首先他返回的是个弧度,我们先要转成角度,然后我们需要把负的角转成0-360度的)然后和初始角度做比较就知道要转多少度了。
2.关于git的几个用法
在你想要的目录下打开git(右键,打开终端输入git 或者直接鼠标右键,就有git bash)
git clone 该任务的url网址
In Eclipse, go to File → Import… → General → Existing Projects into Workspace
git add .
git commit -m 要说的信息
git push
3.计算内角度数的时候,我们为了过那个junit的检测,需要把算到的浮点数保存到小数点后两位,这里的技巧如下

DecimalFormat df = new DecimalFormat(".00");
double ans; //你的运算结果
return Double.valueOf(df.format(ans)); //返回的就是小数点后两位的浮点数

4.对于得到一组点的凸包问题,我们的算法是从一个点出发,把这个凸包圈出来。
那么问题来了,从哪个点出发,圈哪些点emmm
1.我们一定要从一个凸包上的点圈起,而最边界上的点一定在凸包上,比如如横坐标最小,纵坐标最大的点(最左上角的点)显然是一个边界点。
2.如果你找到了最左上角的点,从她开始选剩余点中让你旋转度数最小的点(这个点在凸包上),然后再从这个点出发找下一个旋转度数最小的点,依此类推,直到回到起点为止。
3.在你选择点的过程中可能会出现三点共线的情况,也就是对于你的当前点来说有两个点旋转角度都相等都最小,你这时候比较她们距你的距离,选距离远的那个。

P3

这个就是一个图的建立,求图的最短路径算法,而且每条边的权值仅仅为1
因为边上的权值为1,所以求最短路径方法用广度优先搜索最为合适,每次要getDistance就用一边层序遍历即可(用那个三重循环的那个最短路径算法对这道题来说效率太低了,因为每次加一个顶点或边都得重新求所有点之间的最短路径。。。非常低效)
存储图的边,想用一个可变大小的二维数组
我想到了如下的方法

this.bian = new ArrayList<ArrayList<Integer>>();

不过非常不好用,要想具体访问一个索引的数据得写挺多,而且还可能写一写就乱了,我感觉还是不如老老实实的建立10000*10000的大数组简单粗暴

P4

1.找@username的过程本质上就是从一个文本中要找我们想要的格式的字串。
我们用pattern这个东西来实现。

Pattern pattern = Pattern.compile("( @[A-Za-z0-9_-]+)");
Matcher matcher;
matcher = pattern.matcher(text);
while (matcher.find()) {
String x =  matcher.group(1);
}

2.后面没啥好说的了。。。都是脑力劳动了
输出结果大概是这样
fetched 3833 tweets
ranging from 2019-03-10T01:26:14Z to 2019-03-10T13:23:43Z
covers 1351 Twitter users
follows graph has 3297 nodes
parhamlogan
charliekirk11
realdonaldtrump
reuters
opindia_com
mitsmr
flowerforyuzu
ejax27
worldgamesad
emilia_suze

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: