JAVA第二次作业

(一)学习总结

1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法。

举例说明equals方法和==的区别

操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。比较的是2个对象的地址,而equals比较的是2个对象的内容。当equals为true时,==不一定为true。

2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?

构造方法是一种特殊的方法,与一般的方法不同是:

1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。

2.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。

3.不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。

构造方法的重载:只要每个构造方法的参数类型或参数个数不同,即可实现重载。

public class Test {
public static void main(String args[]) { 
   Foo obj = new Foo();       
   }     
}
class Foo{
    int value;
    public Foo(int intValue){
    value = intValue;
    }
}

该程序不能编译,因为构造函数 Foo()未定义。应改为Foo obj = new Foo(0);

3.运行下列程序,结果是什么?查阅资料,分析为什么。


没有考虑到double,float精度问题

修改后的程序为

import java.math.BigDecimal;

class Math{
    public static double add(double d1,double d2,double d3){
                BigDecimal b1 = new  BigDecimal(d1) ;
                BigDecimal b2 = new  BigDecimal(d2) ;
                BigDecimal b3 = new  BigDecimal(d3) ;
                return b1.add (b2).add(b3). doubleValue();
        }
    public static double round(double d, int len) {
        BigDecimal b1 = new  BigDecimal(d) ;
        BigDecimal b2 = new  BigDecimal(1) ;
        return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();  
    }
}
    public class Test {
             public static void main(String args[]) 
        { 
            ystem.out.println("等于:"+Math.round(Math.add(0.1,0.1,0.1),1));
    }
}

5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)

String 对象是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在 一起时,使用 StringBuilder类可以提升性能。

(二)实验总结

实验内容:
1.评分系统

程序设计思路:先设置给一位选手评分,创建一个数组,然后循环五次。

问题1:去掉最大小值

解决的方法:

			int index=0,sum=0,temp=0,avg=0;
			for(int i=0;i<a.length-1;i++){
			  for(int j=i+1;j<a.length;j++){
				  if(a[j]>a[i]){
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
				  } 
			  }
			}
			//求和
			while(a.length !=index){
				sum +=a[index];
				index++;
			}
			do{
				sum=sum-a[0]-a[a.length-1];
			}
			while(false);
			avg=sum/8;
			System.out.println("该选手的成绩为:"+avg);
	}

2.Email验证

1.程序设计思路:利用mail.matches(reg)定义一个字符串,输入邮件的格式。然后用户输入的与它比较。

3.统计文件

1.程序设计思路:先按逗号把各个文件分开,,利用substring()方法取出第一个首字符,然后利用toUpperCase()大写输出。然后按"."号分割开,利用str1.indexOf(".")的方法,取文件名的后缀名。然后统计个数

问题1:个数没有加到一起

解决方法:

(三)代码托管(https://git.oschina.net/hebau_cs15/zuoye.git)

原文地址:https://www.cnblogs.com/hukauihui/p/6626228.html