《Java技术》第二次做业

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

2.什么是构造方法?什么是构造方法的重载?下面的程序是否能够经过编译?为何?git

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

不能,构造方法用于在建立对象时对其进行初始化。方法的重载就是方法名称相同,但参数的类型和参数的个数不一样,经过传递参数的个数及类型不一样以完成不一样功能的方法调用。数组

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

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,输出的(a+b+c)为0.30000000000000004函数

为了处理精度损失的问题,可使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。性能

程序修改成:学习

import java.math.BigDecimal;

public class Math {
public static void main(String args[]) {
    
    BigDecimal b1=new BigDecimal("0.1");
    BigDecimal b2=new BigDecimal("0.1");
    BigDecimal b3=new BigDecimal("0.1");
    
    double s;
    s=b1.add(b2).add(b3).doubleValue();
    System.out.println(s);
    if(s == 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;
}

结果为:.net

Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:6)

这个调用使用类名称进行调用,则必须将其声明为static属性。设计

应为:

public class Test {
 public static void main(String[] args) {
   MyClass[] arr=new MyClass[3];
   arr[1].value=100;
   System.out.println(arr[1].value);
 }
}
    class MyClass{
public static int value=1;
}

5.在一个10000次的循环中,须要进行字符串的链接操做,那么,应该使用String类仍是StringBuffer类,为何?性能有差别吗?可否写出测试代码证实你的结论。

应该使用StringBuffer类。

String类表示的字符串是常量,一旦建立则内容和长度都不能改变。StringBuffer类表示字符容器,内容和长度能够随时修改。在操做字符串时,若是该字符串仅用于表示数据类型,则使用String类型,若是须要对字符串进行增删操做,则使用StringBuffer类。

String类:

public class Test {
 public static void main(String[] args){
    String str = "Hello";
    for (int i=0; i<10000;i++) {
        str =  str+"World";
    }
     System.out.println(str);
            
 }
 }

StringBuffer类:

public class Test {
 public static void main(String[] args){
    StringBuffer str = new StringBuffer("Hello");
    for(int i=0;i<10000;i++){
        str.append("world");
    }
    System.out.println(str);         
}
}

(二)实验总结

实验内容:
1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。

程序设计思路:先用双重循环,在内循环依次输入每一个选手10个评委所得的分,赋值给数组,而后在对每一个选手的分求总和,而后去掉最大值和最小值,再求平均值,而后将平均值赋给另外一个数组,五个选手重复上述数输入,最后再将平均值的数组从高到低排序,最后循环输出数组。

问题1:

int y=in.nextInt();
a[j]=y;

缘由:不知道应该怎么输入数组

解决方案:后来问了同窗知道输入变量而后将变量赋值给数组

问题2:

d=max(a,d);
x=min(a,x);
System.out.println(sum);
System.out.println("第"+(i+1)+"我的的最高分"+d);
System.out.println("第"+(i+1)+"我的的最低分"+x);
sum=sum-d-x;

缘由:不会调用函数

解决方案:经过看书,从网上查资料及同窗帮助修改,实参与形参个数相等 ,类型一致。使

d=max(a,d);
x=min(a,x);

完成了函数调用。

2.Email验证:在各类应用中,须要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.以前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾 )

程序设计思路:让用户输入一个邮箱,而后对用户输入的邮箱进行判断,'@'和'.'同时存在为下标都不为'-1','@'在'.'以前为'@'的下标小于'.'的下标, 不能'@'开头,用以。。开头字符来写, 以'com|cn|net|gov|edu|org'结尾用以。。字符结尾来写,这些条件都知足邮箱有效,不然无效。
问题1:

if((str.indexOf("@"))<(str.indexOf("."))) &&(str.indexOf("@")!=-1)&&(str.indexOf(".")!=-1))
缘由:不知道同时存在和。。在。。以前应该怎么写

解决方案:经过问同窗,知道能够用下标大小来表示在。。以前,下标不为'-1'来表示存在。

问题2:

if((!str.startsWith("@"))&&((str.endsWith("com"))||(str.endsWith("cn"))||(str.endsWith("net"))
            ||(str.endsWith("gov"))||(str.endsWith("edu"))||(str.endsWith("org")))

缘由:输出老是有错

解决方案:原来是这样写的

(str.endsWith("com||cn||net||gov||edu||org")

后来老是错误就把这些分开写,为

((str.endsWith("com"))||(str.endsWith("cn"))||(str.endsWith("net"))||(str.endsWith("gov"))||(str.endsWith("edu"))||(str.endsWith("org")))

而后就正确了。

(三)代码托管

码云commit历史截图

相关文章
相关标签/搜索