Lab-1 Fundamental Java Programming and Testing

Lab-1 Fundamental Java Programming and Testing

3.1 Magic Squares
该实验分为两部分:
第一部分是读入文件,并判断读入矩阵是否为幻方。
首先是读入文件,通过以下方式:
File file = new File(fileName);
FileReader read = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = bufferedReader.readLine();
然后是判断是否为幻方,具体判断一下内容:
// 检测每行数字个数是否相同
// 检测矩阵中是否存在负数或0
// 检测矩阵行、列数是否相同
// 检测矩阵中数字是否为1-nn,且不重复
// 计算每一行、列、对角线的和,并比较是否相等
第二部分是读入数据,以此生成幻方,并判断。这一部分相对简单,因为生成幻方的程序已给,判断只需调用先前的函数,唯一需要注意的部分就是如何将数据输出到文件,这里用以下方法:
File file = new File(“src/P1/txt/6.txt”);
file.createNewFile();
PrintWriter write = new PrintWriter(file);
write.print(magic[i][j] + “\t”);
最终运行结果如下:
在这里插入图片描述
在这里插入图片描述
3.1.1 isLegalMagicSquare()
先读取文件,一行一行读取,同时通过函数
String[] line = lineTxt.split("\t");
square[n][i] = Integer.valueOf(line[i].trim());
将每一行保存到int数组square中,同时判断每行数字个数是否相同及是否存在负数、0或浮点数。
转存完毕后,先判断矩阵行、列数是否相同和矩阵中数字是否为1-n
n,且不重复。
全部判断通过后,利用循环分别计算数组每一行、列、对角线的和,并比较是否相等。
若相等,则返回true,倘若上面任一判断未通过,则返回false,并终止该函数的调用。
3.1.2 generateMagicSquare()
老师给的程序能够很好的生成所需幻方,只需将最后的输出,改为写入文件中(利用上述方法)。
判断输入是否合法,只需在main函数中加入一个判断语句,若为偶数或非正数,则要求重新输入。
3.2 Turtle Graphics
利用老师给的程序,及程序中的方法,完成图形的绘画,或进行简单的几何运算,只需灵活运用turtle.forward()和turtle.turn()两函数即可。
该实验的难点是凸包问题,我查找了一些该问题的算法,最终选择了一种简单的方法来实现他,但是在单独运行P2时已经检测成功,搬运到一起时,检测却不成功了,该问题我始终没能解决。
3.2.1 Problem 1: Clone and import
打开目标存储文件夹 右键点击Git Bash
输入git clone https://github.com/ComputerScienceHIT/Lab1-1180300703.git
3.2.2 Problem 3: Turtle graphics and drawSquare
for (int i = 0; i < 4; i++)
{
turtle.forward(sideLength);
turtle.turn(90);
}
在这里插入图片描述
3.2.3 Problem 5: Drawing polygons
通过几何方法,可得 angle = 180.0 – 360.0 / sides
在这里插入图片描述
3.2.4 Problem 6: Calculating Bearings
通过几何方法,利用反正切函数,可计算出结果。
3.2.5 Problem 7: Convex Hulls
算法概括:先找出最左边的点,以该点顺时针旋转,第一个遇到的点,即为下一个凸点,以次旋转一周,回到最初的点,凸包全部找到。
在这里插入图片描述
3.2.6 Problem 8: Personal art
运用turtle.forward()和turtle.turn()两函数,以及循环语句和数值的增加,可得:
在这里插入图片描述
3.2.7 Submitting
先建立ssh密匙。
利用语句git remote add origin https:// github.com/ComputerScienceHIT/Lab1-1180300703.git 将本地仓库关联到自己的GitHub远程库。
通过语句$ git push origin master直接提交。
3.3 Social Network
该实验是一个图论题,我以每一个Person类为一个节点,类中保存与该节点直接相连的其他节点,故形成一个图。
该实验的难点是广度优先搜索,但由于之前的数据结构已经学习过,故比较简单。只需运用队列List line = new ArrayList<>();即可完成。
3.3.1 设计/实现FriendshipGraph类
private Set vers = new HashSet(); //保存所有节点
private int number; //保存节点数

public void addVertex(Person per) //增加一个顶点
public void addEdge(Person per1,Person per2) //增加一条单向边
public int getDistance(Person per1,Person per2) //计算最短距离
3.3.2 设计/实现Person类
public String name; //保存名字
public int num; //保存编号
public Set friends = new HashSet(); //保存相邻节点

public Person(String rname) //构造函数 初始化name
public void addFriend(Person per) //增加相邻节点
3.3.3 设计/实现客户端代码main()
public static void main(String[] args) {
FriendshipGraph graph = new FriendshipGraph();

    Person rachel = new Person("Rachel");
    Person ross = new Person("Ross");
    Person ben = new Person("Ben");
    Person kramer = new Person("Kramer");

    graph.addVertex(rachel);
    graph.addVertex(ross);
    graph.addVertex(ben);
    graph.addVertex(kramer);

    graph.addEdge(rachel, ross);
    graph.addEdge(ross, rachel);
    graph.addEdge(ross, ben);
    graph.addEdge(ben, ross);
    
    System.out.println(graph.getDistance(rachel, ross));// 1
    System.out.println(graph.getDistance(rachel, ben));// 2
    System.out.println(graph.getDistance(rachel, rachel));// 0
    System.out.println(graph.getDistance(rachel, kramer));// -1   
}

实验题目中已给出。
3.3.4 设计/实现测试用例
我一共设置了两个用例,一个是题目给出的较简单用例,另一个是较复杂用例,如下:

    assertEquals(5, graph.getDistance(Bill,Honey));
    assertEquals(2, graph.getDistance(Soup, Jerry));
    assertEquals(0, graph.getDistance(Lily, Lily));
    assertEquals(-1, graph.getDistance(Mark, Zom));
    assertEquals(-1, graph.getDistance(Tom, Zom));
    assertEquals(3, graph.getDistance(Lily,Honey));
    assertEquals(2, graph.getDistance(Lily,Soup));
assertEquals(1, graph.getDistance(Zom,Tary));

最终结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值