Java第二次作业 1502 马 帅
《Java技术》第二次作业
(一)学习总结
1.String类中的equals()方法如下:
如代码所示:
public class Test {
public static void main(String args[]) {
String str1=new String("Hello");
String str2=new String("Hello");
if(str1==str2)
System.out.println("str1 == str2? True!");
else
System.out.println("str1 == str2? False!");
if(str1.equals(str2))
System.out.println("str1 equals str2? True!");
else
System.out.println("str1 equals str2? False!");
}
}
结果为:
str1 == str2? False!
str1 equals str2? True!
同样的内容,使用""比较就会显示为不同,而使用equals()方法比较结果就为相同,因为equals比较的是字符串内容,而""比较的是字符串的地址。
2.为了使给类中的对象赋值时更加便捷,所用到的一个简单的方法就叫构造方法,其定义格式为:
class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2){
程序语句:
...
}
}
当每个构造方法的参数类型或参数数量不同时,就可以实现构造方法的重载。
public class Test {
public static void main(String args[]) {
Foo obj = new Foo();
}
}
class Foo{
int value;
public Foo(int intValue){
value = intValue;
}
}
上述程序不能通过编译,因为没有在调用时输入参数。
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”,(a+b+c)结果为0.30000000000000004。原因是精度不够,不能直接进行加法运算。
改为如下代码后结果正确:
import java.math.BigDecimal;
public class Test {
public static void main(String args[]) {
BigDecimal a = new BigDecimal("0.1");
BigDecimal b;
BigDecimal c= new BigDecimal("0.3");
b=a.add(a.add(a));
if(b.compareTo (c)==0){
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();
arr.value=100;
}
}
class MyClass{
public int value=1;
}
5.应该使用StringBuffer类进行10000次连接操作,因为String一旦赋值就不可更改,赋予的新值将会重新开辟内存地址进行存储,而StringBuffer类使用append等方法改变字符串的值得时候只是在原有对象存储的内存地址上进行连续修改操作,这样可以减少资源的使用。简而言之,就是StringBuffer只指向一个字符串,改变了字符串的内容,而String指向另外的字符串。
(二)实验总结
1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
- 程序设计思路:使用二维数组来记录选手的成绩。
(1)在最大值最小值问题上,采用设第一个元素为最大(小)值,依次向之后的每一个元素比较。
(2)遍历每个选手的每个成绩,将最高分和最低分去掉,再定义一个计算平均值得方法,将结果和选手号保留到另一个二维数组,按照选手平均成绩降序输出。 - 实验问题分析:
问题1:成绩有时会出错。
原因:当有相同的最高分和最低分时成绩错误。
解决方案:定义一个标记,第一次去掉最高分和最低分时修改标记,第二次遇到相同的成绩时不再去掉。
2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾)
- 程序设计思路:定义一个int类型(或boolean类型)的方法,输入e-mail地址,使用int indexOf(String str),boolean endsWith(String suffix)方法进行if语句的判断,最后对方法的返回值进行判断即可。
- 实验问题分析:
没有遇到问题。
3.统计文件:输入一个字符串,包含各种文件类型的文件名。文件名之间用“,”分隔,要求将各个文件名的首字母大写后分别输出,并统计各种类型文件的文件个数。
- 程序设计思路:
(1)输入字符串后,首先使用String[] split(",")进行以","拆分,并存到一个字符数组中。
(2)使用如下语句进行首字母大写
e[n]=e[n].substring(0,1).toUpperCase()+e[n].substring(1);
即用String substring(0,1)找到第一个字符,使用String toUpperCase()变为大写,加上原字符串后边部分。
(3)使用如下代码获得文件后缀名:
String b[]=new String[a.length];//a[]为传递的参数
String s=a[n].substring(a[n].indexOf(".")+1);
b[n]=s;
即找到"."的位置,并将后面的字符串存入字符数组。
(4)遍历得到的字符数组,并套用一个循环(遍历当前位置之前是否出现过该字符串)进行判断,得到结果。
- 实验问题分析:
无。
4.身份证识别:公民身份证号码由十八位数字组成。从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。顺序码的奇数分配给男性,偶数分配给女性。编写一个识别身份证基本信息的小工具,输入一个居民身份证号,则输出居民所属省份(直辖市、自治区),生日(格式:xxxx-xx-xx)和性别信息。
- 程序设计思路:使用String substring(int beginIndex)和String substring(int begin,int end)进行对应的判断就可以输出。
- 实验问题分析:值得注意的是首两位为地去判断,将地区信息输入进一个二维数组,对应的数字即为下标,方便查找和运算。
(三)代码托管
- 码云commit历史截图
(四)学习进度条
代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 | |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 114/300 | 30/30 | 看了一些关于Java的课程资料,学会了使用Eclipse,完成了作业 |
第5周 | 208/300 | 30/30 | 继续学习Java的一些方法,深入课堂上讲的String类和StringBuffer类,在完成作业的同时扩展了自己的知识面 |
第6周 |