• 《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


  • 相关阅读:
    python核心编程2 第八章 练习
    python核心编程2 第六章 练习
    python核心编程2 第五章 练习
    Redis
    CENTOS7错误:Cannot find a valid baseurl for repo: base/7/x86_6
    HTTP协议
    计算机网络知识点
    好记性不如烂笔头~
    一些算法题
    解决mysql插入数据时出现Incorrect string value: 'xF0x9F...' 的异常
  • 原文地址:https://www.cnblogs.com/yl1997/p/6633358.html
Copyright © 2020-2023  润新知