• java第二次实验作业


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

    ‘==’比较的是字符的地址 ‘equals’比较的是字符串的内容
    例:
    截图

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

    }

    截图

    public class lianxi {
    public static void main(String[] args){
    String str1 ="hello";
    String str2 =new String("hello");
    String str3=str2;
    System.out.println("str1str2->"+(str1str2));
    System.out.println("str1str3->"+(str1str3));
    System.out.println("str2str3->"+(str2str3));
    }
    }

    ‘==’比较的地址不相同 所以有false,而‘equals’比较内容则都是true

    2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
    构造方法是一种特殊的方法,与一般的方法不同是:
    1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
    2.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
    3.不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
    方法重载就是同一个方法名,不同的传参。

    这个程序构造函数Foo()未定义 应该改为
    public class Test {
    public static void main(String args[]) {
    Foo obj = new Foo(0);
    }
    }
    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");
        }
    }     
    

    }

    double或float是不需要准确计算精度的数字可以用的,而这个需要精确的计算小数点后面的位数
    应该改为

    import java.math.BigDecimal;
    public class lianxi {
    	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");
            }
        }
    }
    

    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 lianxi {
    	public static void main(String[] args) {
    		MyClass[] arr={new MyClass(),new MyClass(),new MyClass()};
    	    arr[1].value=100;
    	}
    
    
    	}
    	class MyClass{
    	    public int value=1;
    }
    

    5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)
    通过在网上查阅资料,了解到由于String类是不可变的,每次对其改变都要创建新字符串对象,所以它是最慢的; StringBuilder不需要执行同步操作,速度要比StringBuffer快

     public static void main(String[] args) {
              long begin = System.currentTimeMillis();
              StringBuilder sb = new StringBuilder();
              for(int i=0;i<10000;i++){
                  sb.append(i);
              }
              long end = System.currentTimeMillis();
             long time = end - begin;
              System.out.println(time+"");
        }
     
     }
    
    
    同样循环调用10000次,换成StringBuffer,结果是5毫秒。
    
    
       public static void main(String[] args) {
          long begin = System.currentTimeMillis();
          String str = "";
          for(int i=0;i<10000;i++){
              str = str+i;
          }
          long end = System.currentTimeMillis();
          long time = end - begin;
          System.out.println(time+"");
     }
     
    
    
     用String,循环调用10000次,得出的结果是639毫秒
    

    (二)实验总结
    1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
    ①程序设计思路
    先写一个输入,利用for循环 输入十次,再用一个for循环套在外面,使得能够循环5次,得出五个学生的总成绩,设计一个求最大值最小值的函数程序,返回最大最小值,用总成绩减去最大值最小值并除以8就能得到成绩,之后利用冒泡排序程序,得出成绩的顺序。
    ②问题1
    在算成绩时一直显示的跟计算器算出来的不一样
    ③原因
    除号用错了,用的求余的符号
    ④解决方案
    将%改为/
    问题2:
    之前函数调用一直出错,
    解决方案:

    public static void paixu(double d[])
    

    类名换成了上面的写法,原来是在函数里面定义的 d[]
    2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾 )
    程序设计思路
    用的int aite = email.indexOf("");
    来定义‘@’和‘.’,通过判断符号的地址来判断这俩符号的前后位置,在判断以什么结尾时,用的endsWith("");

    3.统计文件:输入一个字符串,包含各种文件类型的文件名。文件名之间用“,”分隔,要求将各个文件名的首字母大写后分别输出,并统计各种类型文件的文件个数。
    程序设计思路
    String s[] = str.split("\,") ;来将输入的数据按逗号来分离,之后利用for循环将分开的数据输出
    在将循环的次数输出就是分开的个数

    (三)代码托管

    https://git.oschina.net/hebau_cs15/Java-CS01QH.git

    | 项目 | 代码行数(新增/累计) | 学习时间(新增/累计) |本周学习内容 |
    | -------- | -----: | :----: |
    | 目标 | 5000行 | 300小时 |
    | 第2-4周 | 234/300 | 41 |
    | 第5周 | 123/300 | 28 |学会了indexof的使用,学会了用符号将一段数据分隔的方法,复习了函数调用
    | 第6周 | | |

  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/JoeH/p/6626321.html
Copyright © 2020-2023  润新知