您的位置:首页 > 理论基础

厦大计算机系Java程序设计实验(三)

2018-01-19 16:00 681 查看
习题1 三角形类
题目描述:从课本的GeometricObject类继承一个Triangle 类,并满足下列条件:

有3个私有double成员表示三条边,默认长度为1.0;
有1个无参构造方法,用于创建默认三角形;
有1个3参数构造方法,用于创建指定三角形,不需要考虑3边非法的情况;
有1个getArea(),1个getPerimeter() 分别返回三角形的面积和周长;
有1个toString()方法返回三条边的信息,形如"Triangle: side1 = " + side1 + " side2 = " + side2 + "side3 = " + side3。
写一个测试类,测试Triangle类,并且需要设置该类继承来的color和filled 属性。
解题思路:首先实现课本上的GeometricObject类,然后通过继承实现Triangle 类。Triangle 类内包括三条边的边长,以及两个构造函数、两个获取数据的公有函数,并且覆盖实现了toString()方法。
源代码
以下为GeometricObject类的具体实现。import java.util.Date;

public class GeometricObject
{
private String color = "white";
private boolean filled = false;
private Date dateCreated;

public GeometricObject()
{
this.dateCreated = new Date();
}

public GeometricObject(String color, boolean filled)
{
this.dateCreated = new Date();
this.color = color;
this.filled = filled;
}

public String getColor()
{
return this.color;
}

public void setColor(String color)
{
this.color = color;
}

public boolean isFilled()
{
return this.filled;
}

public void setFilled(boolean filled)
{
this.filled = filled;
}

public Date getDateCreated()
{
return this.dateCreated;
}

@Override
public String toString()
{
return "created on " + dateCreated + "\ncolor: " + color +
" and filled: " + filled;
}
}
以下是GeometricObject类的子类Triangle的实现。public class Triangle extends GeometricObject
{
private double a = 1.0;
private double b = 1.0;
private double c = 1.0;

public Triangle()
{
super();
}

public Triangle(double a, double b, double c)
{
super();
this.a = a;
this.b = b;
this.c = c;
}

public double getArea()
{
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}

public double getPerimeter()
{
return a + b + c;
}

@Override
public String toString()
{
return "Triangle: side1 =
4000
" + a + " side2 = " + b + " side3 = " + c;
}
}
如下为测试类的实现。public class Test
{
public static void main(String[] args)
{
Triangle triangle1 = new Triangle(3.0, 4.0, 5.0);
System.out.println("Area: " + triangle1.getArea());
System.out.println("Perimeter: " + triangle1.getPerimeter());
System.out.println(triangle1.toString());

triangle1.setColor("black");
System.out.println("Color: " + triangle1.getColor());
triangle1.setFilled(true);
System.out.println("isFilled: " + triangle1.isFilled());
}
}
测试样例:Area: 6.0
Perimeter: 12.0
Triangle: side1 = 3.0 side2 = 4.0 side3 = 5.0
Color: black
isFilled: true
习题2 删除重复数字
题目描述:写一个方法,能够删除ArrayList中的重复数字,其中数字的类型是Integer。要求在原ArrayList中直接删除重复数字。方法原型如下:
public static void removeDuplicate(ArrayList<Integer> list)
在main方法中调用上述方法,输出删除后的结果。例如某次运行结果如下:
输入:34 5 3 5 6 4 33 2 24
输出:34 5 3 6 4 33 2
解题思路:对于每一个list中的元素,检查其前面的所有元素看是否存在重复,如果存在,则将该元素从表中删除,并且将当前的元素下标向前移动一个,因为表的长度减少了1。
源代码
import java.util.ArrayList;
import java.util.Objects;
import java.util.Scanner;

public class DeleteCommonElement
{
public static void main(String[] args)
{
ArrayList<Integer> list = new ArrayList<>();
Scanner input = new Scanner(System.in);

int count, temp;
System.out.print("Enter the number of list: ");
count = input.nextInt();

System.out.print("Enter each element in the list: ");
for(int i = 0; i < count; ++i)
{
temp = input.nextInt();
list.add(temp);
}

removeDuplicate(list);

System.out.print("Elements in the list after removing duplication: ");
for(int i = 0; i < list.size(); ++i)
{
System.out.print(list.get(i) + " ");
}
System.out.println();
}

public static void removeDuplicate(ArrayList<Integer> list)
{
for(int i = 0; i < list.size(); ++i)
{
for(int j = 0; j < i; ++j)
{
if(Objects.equals(list.get(j), list.get(i)))
{
list.remove(i);
--i;
break;
}
}
}
}
}
测试样例:Enter the number of list: 10
Enter each element in the list: 34 5 3 5 6 4 33 2 2 4
Elements in the list after removing duplication: 34 5 3 6 4 33 2
习题3  异常捕捉
题目描述:写一个程序,练习捕捉异常。
1、首先创建一个100个元素的数组,并用随机数填充该数组,类型随意。
2、提示用户输入一个下标,输出该下标对应的元素值。如果输入不是整数,输出“Input Mismatch.”并提示用户重新输入;如果下标越界,输出“Out of Bounds.”并提示用户重新输入;如果不是以上情况,程序输出元素值后正常结束。
3、代码不允许使用if语句,只能用异常捕捉实现上述功能。
解题思路:使用try-catch语句块,在try块中尝试输入下标,如果出现异常,则交给相应的catch块进行处理。
源代码:import java.util.*;

public class ExceptionTest
{
public static void main(String[] args)
{
int[] a = new int[100];
Random random1 = new Random(3);
Scanner input = new Scanner(System.in);
boolean continueInput = true;

for(int i = 0; i < 100; ++i)
{
a[i] = random1.nextInt(1000);
}

do
{
try
{
System.out.print("Enter a index: ");
int index = input.nextInt();

if(index < 0 || index >= 100)
throw new IndexOutOfBoundsException();

System.out.println("Element a[" + index + "] is " + a[index]);

continueInput = false;
}
catch(InputMismatchException ex1)
{
System.out.println("Input Mismatch. ");
input.nextLine();
}
catch(IndexOutOfBoundsException ex2)
{
System.out.println("Out of Bounds. ");
input.nextLine();
}
}
while(continueInput);
}
}
测试样例:Enter a index: 4.2
Input Mismatch.
Enter a index: -1
Out of Bounds.
Enter a index: 200
Out of Bounds.
Enter a index: 8
Element a[8] is 459习题4 网页分析
题目描述:抓取厦大主页中的“快速链接”下的所有内容。
提示:“快速链接”部分的HTML形如:<li><a href="http://e.weibo.com/xmunews"target="_blank"><i class="iconicon-list-alt"></i>官方微博</a></li>
程序输出为:[序号]标题 URL ,每行一个链接,如:
[1] 官方微博 http://e.weibo.com/xmunews [2] 易班厦大 http://yiban.xmu.edu.cn/ [3] 厦大网址导航 http://123.xmu.edu.cn/ ……
解题思路:首先打开该网站,从网站的流中利用正则表达式匹配出快速链接的标题、网址等信息,并将其输出。
源代码:import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WebGripper
{
public static void main(String[] args)
{
try
{
java.net.URL url = new java.net.URL("http://www.xmu.edu.cn");
int count = 1;
Scanner input = new Scanner(url.openStream());
while(input.hasNext())
{
String line = input.nextLine();

String regex = "<a.*?/a>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(line);

while(matcher.find())
{
String title = ">[^<].*?[^>]</a>";
String href = "href=\"http://.*?\"";

Pattern patternTitle = Pattern.compile(title);
Matcher matcherTitle = patternTitle.matcher(matcher.group());
Pattern patternHref = Pattern.compile(href);
Matcher matcherHref = patternHref.matcher(matcher.group());

while(matcherTitle.find() && matcherHref.find())
{
System.out.print("[" + count + "] ");
++count;
System.out.print(matcherTitle.group().replaceAll(">|</a>", "") + " ");
System.out.println(matcherHref.group().replaceAll("href=\"|\"|>", ""));
}
}
}
}
catch(java.net.MalformedURLException ex)
{
System.out.println("Invalid URL. ");
}
catch(java.io.IOException ex)
{
System.out.println("I/O Errors: no such file. ");
}
}
}
测试样例测试样例1:[1] 网上展馆 http://wszg.xmu.edu.cn/ [2] 校园地图 http://map.xmu.edu.cn/ [3] 学科 http://gs.xmu.edu.cn/ch/index/news/catid/28/ [4] 师资 http://rsc.xmu.edu.cn/s/137/t/722/p/1/c/8710/d/8883/list.htm [5] 本科生教育 http://jwc.xmu.edu.cn/ [6] 研究生教育 http://gs.xmu.edu.cn/ [7] 继续教育与网络教育 http://nec.xmu.edu.cn/ [8] 国际学生教育 http://oec.xmu.edu.cn/ [9] 管理 http://xsc.xmu.edu.cn/ [10] 自然科学与技术 http://std.xmu.edu.cn/ [11] 人文与社会科学 http://skc.xmu.edu.cn/ [12] 博士后科研流动站 http://rsc.xmu.edu.cn/s/137/t/445/p/1/c/6462/d/6636/list.htm [13] 厦门大学学报(自然版) http://jxmu.xmu.edu.cn/ [14] 厦门大学学报(哲社版) http://xdxbs.xmu.edu.cn/ [15] 成果产业化 http://zcjy.xmu.edu.cn/ [16] 大学科技园 http://kjy.xmu.edu.cn/ [17] 战略合作 http://zlhz.xmu.edu.cn/ [18] 后勤服务 http://hqjt.xmu.edu.cn/ [19] 会议服务 http://www.xmuiaec.com/ [20] 出版服务 http://www.xmupress.com/ [21] 团委 http://tw.xmu.edu.cn/ [22] 学生委员会 http://xsh.xmu.edu.cn/ [23] 研究生会 http://yjsh.xmu.edu.cn/ [24] 社团联合会 http://slh.xmu.edu.cn/ [25] 鼓浪听涛BBS http://bbs.xmu.edu.cn/ [26] 校园活动 http://lecture.xmu.edu.cn/ [27] 国际合作与交流 http://ice.xmu.edu.cn/project.aspx [28] 港澳台合作与交流 http://ice.xmu.edu.cn/chinese.aspx [29] 孔子学院 http://www.cnconfucius.com/ [30] 留学服务 http://ice.xmu.edu.cn/abroad.aspx [31] 招生 http://zsb.xmu.edu.cn [32] 就业 http://jyzd.xmu.edu.cn [33] 官方微博 http://e.weibo.com/xmunews [34] 易班厦大 http://yiban.xmu.edu.cn/ [35] 厦大网址导航 http://123.xmu.edu.cn/ [36] 数字图书馆 http://lib.xmu.edu.cn/ [37] 校友服务 http://alumni.xmu.edu.cn/ [38] 教育基金会 http://edf.xmu.edu.cn/ [39] 马来西亚分校 http://www.xmu.edu.my [40] 嘉庚学院 http://jgxy.xmu.edu.cn/ [41] 国际学院 http://liuxue.xmu.edu.cn/ [42] 汉推南方基地 http://www.cnconfucius.com/ [43] 网上展馆 http://wszg.xmu.edu.cn/ [44] 信息公开 http://gk.xmu.edu.cn/ [45] 招聘信息 http://rsc.xmu.edu.cn/s/137/t/722/p/1/c/6467/d/6557/list.htm [46] 网上展馆 http://wszg.xmu.edu.cn/ [47] 校园地图 http://map.xmu.edu.cn/ [48] 学科 http://210.34.0.175/hy/Introduction/Introduction_gjzdxk.asp [49] 师资 http://rsc.xmu.edu.cn/s/137/t/722/p/1/c/8710/d/8883/list.htm [50] 本科生教育 http://jwc.xmu.edu.cn/ [51] 研究生教育 http://gs.xmu.edu.cn/ [52] 继续教育与网络教育 http://nec.xmu.edu.cn/ [53] 国际学生教育 http://oec.xmu.edu.cn/ [54] 管理 http://xsc.xmu.edu.cn/ [55] 自然科学与技术 http://stinfo.xmu.edu.cn/ [56] 人文与社会科学 http://skc.xmu.edu.cn/ [57] 博士后科研流动站 http://rsc.xmu.edu.cn/s/137/t/445/p/1/c/6462/d/6636/list.htm [58] 厦门大学学报(自然版) http://jxmu.xmu.edu.cn/ [59] 厦门大学学报(哲社版) http://xdxbs.xmu.edu.cn/ [60] 成果产业化 http://zcjy.xmu.edu.cn/ [61] 大学科技园 http://kjy.xmu.edu.cn/ [62] 战略合作 http://zlhz.xmu.edu.cn/ [63] 后勤服务 http://hqjt.xmu.edu.cn/ [64] 会议服务 http://www.xmuiaec.com/ [65] 出版服务 http://www.xmupress.com/ [66] 团委 http://tw.xmu.edu.cn/ [67] 学生委员会 http://xsh.xmu.edu.cn/ [68] 研究生会 http://yjsh.xmu.edu.cn/ [69] 社团联合会 http://slh.xmu.edu.cn/ [70] 鼓浪听涛BBS http://bbs.xmu.edu.cn/ [71] 校园活动 http://lecture.xmu.edu.cn/ [72] 国际合作与交流 http://ice.xmu.edu.cn/project.aspx [73] 港澳台合作与交流 http://ice.xmu.edu.cn/chinese.aspx [74] 孔子学院 http://www.cnconfucius.com/ [75] 留学服务 http://ice.xmu.edu.cn/abroad.aspx [76] 招生 http://zsb.xmu.edu.cn [77] 就业 http://jyzd.xmu.edu.cn [78] 爱厦大 http://ixiada.xmu.edu.cn [79] 旧版主页 http://www2012.xmu.edu.cn/ 测试样例2:输入网址为http://www.xmu.com.cn时,输出I/O Errors: no such file.
测试样例3:输入网址为htp://www.xmu.edu.cn时,输出Invalid URL.
测试样例4:输入网址为http://www.google.com.hk时,输出I/O Errors: no such file.
存在的问题
本程序虽然可以在http://www.xmu.edu.cn上很好的实现题目要求的功能,但是如果在其他网页上进行抓取,将出现一些问题。
如在中国政府网http://www.gov.cn上进行抓取时,会出现[8] <img style="opacity: 1;"src="/govweb/c1293/201604/5068280/images/694c4afb689e408b917a841aef7f9204.jpg"  http://www.gov.cn/premier/2016-04/26/content_5068208.htm 这样的情况,由于出现了图片链接而使得正则表达式的匹配出现一些问题,于是,网页的标题变成了非常奇怪的标签。
还有在搜狐网http://www.sohu.com.cn上抓取网页链接时,会出乱码[1] �Ѻ�http://www.sohu.com[2] �ѹ�http://www.sogou.com/[3] ���뷨 http://pinyin.sogou.com/ ……
由于没有考虑编码问题,所以当网页的编码方式出现不同时,程序的结果就会出现错乱。
声明:由于本人对于正则表达式并不熟悉,所以模式串的正则表达式是本人根据网络上的资料修改后得到,并非本人原创。当然,对正则表达式的不熟悉也给程序带来了一些目前能力所不及的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: