《Java技术》第二次作业
(一)学习总结
1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法。举例说明equals方法和==的区别。
java.lang.String.equals() 方法比较字符串与指定的对象。其结果是true当且仅当参数不为null,并且是一个String对象,这个对象表示相同的字符序列声明
声明java.lang.String.equals()方法 public boolean equals(Object anObject)equals()方法与==的区别,equals()方法比较的是字符串的内容,而==比较的是字符串存储的地址参数,此方法返回true如果给定对象代表一个字符串,这个字符串,否则返回false
实例
下面的例子显示使用的java.lang.String.equals()方法package com.pieryon; import java.lang.*;public class StringDemo { public static void main(String[] args) {String str1 = "sachin tendulkar";String str2 = "amrood admin";String str3 = "amrood admin";// checking for equalityboolean retval1 = str2.equals(str1);boolean retval2 = str2.equals(str3);// prints the return valueSystem.out.println("str2 is equal to str1 = " + retval1);System.out.println("str2 is equal to str3 = " + retval2); }}
编译和运行上面的程序,这将产生以下结果:
str2 is equal to str1 = false str2 is equal to str3 = true2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
构造方法与类名相同,没有返回类型,在类初始化时调用,为类中的属性初始化。
- 构造方法的重载与方法的重载相同,方法名称相同,参数类型或个数不同,用于完成不同功能.
public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } }
- 不能通过编译,原因是在有参构造方法中没有传递一个参数,应该在Foo obj = new Foo()中添加一个参数,如:Foo obj = new Foo(10);
3.运行下列程序,结果是什么?查阅资料,分析为什么。
`public class Test { public static void main(String args[]) { double a = 0.1; double b = 0.1; double c = 0.1; if((a + b + c) == 0.3){ System.out.println("等于0.3"); }else { System.out.println("不等于0.3"); } } }`
运行结果是“不等于0.3”
4.运行下列程序,结果是什么?分析原因,应如何修改.
`public class Test {public static void main(String[] args) { MyClass[] arr=new MyClass[3]; arr[1].value=100; } } class MyClass{ public int value=1; } `
错误原因:没有正常初始化数组,应改为
public class Test {public static void main(String[] args) {MyClass[] arr=new MyClass{new MyClass(),new MyClass(),new MyClass()};arr[1].value=100;}}class MyClass{public int value=1;}
5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。
应该使用StringBuffer类。
因为Strin类表示字符串常量且内容和长度不能修改但是StringBuffer类表示字符变量且内容和长度可以被修改,效率更高 Strin类 StringBuffer类(二)实验总结
1.评分系统
- 程序设计思路:首先声明整型数组grade,为整型数组grade分配内存空间,其元素个数为5,grade为评委打分。运用循环输入每个选手的所有分数。然后求分数中的最大值,最小值。总数减去最大值最小值求平均分。再将分数总和减去最大值最小值除以4得出平均分,存到另一个数组中,最后将平均分排序倒序输出。
- 实验问题分析: 问题1:输出的数组排序不正确 原因:不会运用java的数组排序 解决方案:Arrays.sort(avgl); 问题2:后面排序数组的时候,数组没有识别 原因:数组定义在了上一个循环的里面的 解决方案:将数组的定义放在循环外面。2.邮箱验证
- 程序设计思路:输入一串字符串,用if语句进行判断 实验问题分析: 问题1:判断条件没有实现? 原因:判断条件出现问题 解决方案:if (cond1 != 0 && cond2 != 1&& cond2 != 0 && cond1 < cond2 && cond1 != 0){ /如果cond1值为-1,说明@不存在;如果cond1值为1,说明@开头;如果cond1 < cond2,说明 @ 在 . 的前面/
3.身份证验证
程序设计思路: 把省市放在一个二维数组中,截取身份证号的前两位存放到数组中,输出数组中对应的省份;,截取出生日期按要求输出;用第17位和2求余,结果余0为女生,余1为男生。 实验问题分析: 问题1:输出不了年月日 原因:类型不对 解决方案:强制转换int a=Integer.parseInt(strsex); 问题2:不会判断省份 原因:不会使用二维数组 解决方案:` String x[][]= { {"北京市","天津市","河北省","山西省","内蒙古"}, {"辽宁省","吉林省","黑龙江省"}, {"上海市","江苏省","浙江省","安徽省","福建省","江西省","山东省"}, {"河南省","湖北省","湖南省","广东省","广西","海南省"}, {"重庆市","四川省","贵州省","云南省","西藏"}, {"陕西省","甘肃省","青海省","宁夏","新疆"}};System.out.println("籍贯是 "+x[b-1][d-1]); }`
(三)[代码托管]http://git.oschina.net/hebau_cs15/java-CS02szy/tree/master/
码云commit历史截图
(四)学习进度条
代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容 目标 5000行 300小时 第2-4周 300/300 30/30 学习了java前两章 第5周 300/300 30/30 学习了重载和输入 第6周