java第二次作业

---张鹏 计科1501班

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

equals()方法如下
public boolean equals(String str)

使用==进行比较,其比较的是地址,如果地址相同,则返回ture,否则返回false。具体截图如下,具体程序如下。

然而使用equals()方法,比较的却是内容,如果内容相同,则返回ture,否则返回false,具体程序如下图。


2.2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
构造方法就是指在一个程序中可以重复调用的一段代码段。
所谓的方法重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型的不同可以完成不同功能方法调用。

此程序无法完成编译,具体如以下截图。

显示构造方法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”
Java中的简单浮点数类型float和double不能够进行运算,但是使用BigDecimal并且用String来够造,方可解决此遇到的计算精度问题。

import java.math.BigDecimal;
public class Demo {
    public static void main(String args[]) { 
        double a = 0.1;
        double b = 0.1;
        double c = 0.1;
        if(add(add(a,b),c) == 0.3){
            System.out.println("等于0.3");
        }else {
            System.out.println("不等于0.3");
        }
    }    
    public static double add(double d1,double d2){
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.add(b2).doubleValue();
    }
}

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 Demo {
        public static void main(String[] args) {
            MyClass[] arr=new MyClass[3];
            for(int i=0;i<arr.length;i++){
                arr[i]=new MyClass();
            }
            arr[1].value=100;
        }
    }
    class MyClass{
        public int value=1;
    }

5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?
String类表示的字符串是常量,一旦创建则内容和长度都不能改变。StringBuffer类表示字符容器,内容和长度可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类型,如果需要对字符串进行增删操作,则使用StringBuffer类。
有差异,如果要进行字符串的连接操作,则StringBuffer类要比String类效率更高。

(二)实验总结

1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
程序设计思路:建立几个方法,例如求最大值、最小值、总分、平均分等几个方法,以下通过对其的调用,按从高到低循环输出其选手得分。
问题1:

double a[]={0},b[]=new double{0};

原因:因为上边显示要对数组进行初始化,所以开始的时候直接把数组初始化为0,也么有考虑到数组越界问题,得对数组长度进行定义。
解决方案:

double a[]=new double[10],b[]=new double[5];

问题2:

for(int i=0;i<4;i++){
			for(int j=0;j<=4-i;j++){
				if(b[j]<b[j+1]){
					d=b[j];
					b[j]=b[j+1];
					b[j+1]=d;
				}	
			}

原因:j<=4-i,开始的时候多让其循环了一次,导致错误的产生。
解决方案:

for(int i=0;i<4;i++){
			for(int j=0;j<=4-i-1;j++){
				if(b[j]<b[j+1]){
					d=b[j];
					b[j]=b[j+1];
					b[j+1]=d;
				}
			}

2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾 )
程序设计思:运用endsWith()、indexOf()方法检测是否满足email要求,然后如果满足需求给变量赋值为1,否则为0,最后通过判断来验证email是否正确。
问题1:

if(a.endsWith(s)||a.endsWith(f)||a.endsWith(l)||a.endsWith(n)||a.endsWith(y)||a.endsWith(t)

原因:没有想到运用endsWith()方法进行对字符串末尾进行判断,开始首先想到的是运用一个循环,检查字符串末尾是否为email末尾符合要求的那样。

解决方案:运用endsWith()方法进行判断,方便又省时。


3.统计文件:输入一个字符串,包含各种文件类型的文件名。文件名之间用“,”分隔,要求将各个文件名的首字母大写后分别输出,并统计各种类型文件的文件个数。
程序设计思路:使用String类的spilt方法按照特定符号","进行拆分,然后再按特定字符"."拆分,把按","拆分好的字符串首字母进行判断,然后使用ascll码把小写变大写。把拆分好的文件拓展名存到一个数组里边,然后再按照循环把文件拓展名以及个数输出即可。
问题1:无法将文件拓展名存到数组里边。
原因:建立数组之后显示不正确,在按"."将各个文件名拆分之后,不会将“.”之后的存入数组。
解决方案:

 for(i=0;i<s.length;i++){
        	String h[]=s[i].split("\\.");
        	b1[i]=h[(h.length-1)];
        }

使用h.length很快将文件拓展名存入数组。
问题2:无法将统计好的文件拓展名与文件个数输出。
原因:代码判断那写的不好,经改进之后可以输出。
解决方案:

for(i=0;i<k;i++){
        	if(b1[i]!=null){             
        	    for(j=i+1;j<k;j++){
        		   if(b1[i].equals(b1[j])){
        			  b1[j]=null;
        			  g[i]+=1;
        			  g[j]=0;
        		    }
        	    }
        	    System.out.println("\\."+b1[i]+"文件个数为:"+g[i]);
           }
        	else{
            	continue;	   
            }
        }      		        

利用循环,判断如果数组里边不是为空,则往下进行查找、赋值、输出等,相反,如果为空则继续从开始进行,此时则i需要加1.

(三)代码托管

pingfen

email

wenjian


(四)进度条

posted on 2017-03-28 12:58  雯水声  阅读(149)  评论(0编辑  收藏  举报