java第二次作业 计科1501张鹏

java第二次作业

---张鹏 计科1501班

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

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

使用==进行比较,其比较的是地址,如果地址相同,则返回ture,否则返回false。具体截图如下,具体程序如下。
1081765-20170328082755654-128509529.png
然而使用equals()方法,比较的却是内容,如果内容相同,则返回ture,否则返回false,具体程序如下图。
1081765-20170328083417842-76580654.png
*****
2.2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
构造方法就是指在一个程序中可以重复调用的一段代码段。
所谓的方法重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型的不同可以完成不同功能方法调用。
1081765-20170328083849701-1604845342.png
此程序无法完成编译,具体如以下截图。
1081765-20170328085646873-647537586.png
显示构造方法foo()未定义。修改后如下截图
1081765-20170328090147467-1634730168.png
定义的方法里边有参数,则调用的时候必须写上参数,否则无法进行编译。
****
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;
}

无法进行编译,截图如下。
1081765-20170328094222983-174736159.png
上边代码中只对数组进行了声明,而并没有对其进行赋值。

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
1081765-20170328122730436-269926253.png
email
1081765-20170328123339154-469184870.png
wenjian
1081765-20170328123819248-69922039.png
*****

(四)进度条

1081765-20170328125551826-779742780.png

转载于:https://www.cnblogs.com/zhangpengblogs/p/6633837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值