《Java技术》第二次作业

(一)学习总结
1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法。举例说明equals方法和==的区别。

String类的equals()方法比较字符串与指定的对象,若正确,返回true,否则返回false。其中,参数不为null,是一个String对象,这个对象表示相同的字符序列。
例子如下:

 public class Text{
    public static void main(String args[]){
    String str1="hello";
    String str2=new String("hello");
    System.out.println("str1 equals str2 -->"+(str1.equal(str2)));
 }
 }
 程序运行结果:
 str1 equals str2-->true;

 public class Text{
    public static void main(String args[]){
    String str1="hello";
    String str2="hello";
    System.out.println("str1 == str2 -->"+(str1==str2));
 }
 }


程序运行结果
str1==str2〉true

2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
构造方法:是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。
构造方法的重载:同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

public class Test {
    public static void main(String args[]) { 
       Foo obj = new Foo();       
    }     
}
class Foo{
    int value;
    public Foo(int intValue){
        value = intValue;
    }
}
不能通过编译,new Foo()错误,应创建构造函数Foo()

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,更改:

 import java.math.BigDecimal;
    public class Test {
       public static void main(String args[]){
       BigDecimal b1=new BigDecimal("0.1");
       BigDecimal b2=new BigDecimal("0.1");
       BigDecimal b3=new BigDecimal("0.1");
       if(b1.add(b2).add(b3).doubleValue()==0.3 ){
    	   System.out.println("结果是0.3");
       }
       else
    	   System.out.println("结果不是0.3");
    	}
    }
    对于不需要任何准确计算精度的数字可以直接用float或double,但如果需要精确计算的结果,必须用BigDecimal类。

为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。

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[3];
        arr[1].value=100;
     }
}
class MyClass{
    public static int value=1;
}

5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)
用StringBuffer类更好,因为StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。当然,在字符串连接比较少的情况下使用String比StringBuffer方便不少,又不会有过多的性能问题,所以完全可以使用String类.

public class Test{
    public static void main(String args[]){
       StringBuffer sBuffer = new StringBuffer(" test");
       sBuffer.append(" String Buffer");
       System.ou.println(sBuffer);  
   }
}

6.其他需要总结的内容。
(二)实验总结
实验内容:
1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾 )
3.统计文件:输入一个字符串,包含各种文件类型的文件名。文件名之间用“,”分隔,要求将各个文件名的首字母大写后分别输出,并统计各种类型文件的文件个数。
4.身份证识别:公民身份证号码由十八位数字组成。从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。顺序码的奇数分配给男性,偶数分配给女性。编写一个识别身份证基本信息的小工具,输入一个居民身份证号,则输出居民所属省份(直辖市、自治区),生日(格式:xxxx-xx-xx)和性别信息。
对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。
格式如下:
实验内容: 评分系统
程序设计思路:我用的是一维数组,将这10个评委的打分放到里面,求出最大,最小和平均分后,循环五次,分别得到5个人的成绩。再建一个新的数组,将5个人的平均得分放进去,进行升序排列。
问题1:最低得分一直是0
原因:任何数和0比较,0都是最小的
解决方案:将最小值赋值为10,让得分和满分10分将行比较
问题2:第一个人的平均值正常,当从第二个起,其平均分均大于10分
原因:将平均值表达式放入了for循环中,以致在每次的输出的平均值上加上一个的平均值。
解决方案:将平均分的表达式放出for循环外。
实验内容: Email验证
程序设计思路:@在.之前就是让@的值小于.的值之后就运用了布尔类型来判断@是否为开头和com||cn||net||gov||edu||org是否为结尾。
问题:要输入邮箱输入不了
原因:我在比较@和.的大小用了 public int indexOf(String str)方法并将其放出了main主函数外
解决方案:将其方法放入主函数里。
实验内容: 统计文件:
程序设计思路:运用public String[] split(String regex)方法用","对字符串进行拆分,将拆分后的字符串放到一个数组里然后用public String substring(int begin,int end)方法将文件开头改为大写,再将扩展名放入一个数组里,再建一个新的数组并将其都赋值为1,然后,第一个和下一个进行比较,若扩展名相同则第一个扩展名所对应的1加1,后面相同的扩展名变为空,其所对应的1变为0.循环此过程
问题:将以","隔开的文件名放入了数组中
原因:想比较扩展名但不知怎么放
解决方案:将以"."隔开的字符串放入数组中,这就是扩展名
实验内容: 身份证识别
程序设计思路:将数组的长度定义为18,然后用截取字符串的方法操作生日、性别和所属省份
问题1:刚开始运行就终止了,出来好多□
原因:截取字符串的方法用成了toCharArray()方法,这个方法是字符串变成一个字符数组
解决方案:将方法改为了public String substring(int begin,int end)方法
问题1:判断所属省份我用的是if语句,但运行出不来
原因:我定义的身份证数组中的字符串是不能直接等于int类型的数值的
解决方案:将数值加了''
(三)代码托管(务必链接到你的项目)
• 码云commit历史截图
上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。
https://git.oschina.net/hebau_cs15/java-cs01yangliu.git


posted @ 2017-03-28 11:56  萌菇  阅读(185)  评论(0编辑  收藏  举报