Java第二次作业——数组和String类

《Java第二次作业——数组和String类》
(一)学习总结
1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法。举例说明equals方法和的区别。
(1)右键项目,依次选择:构建路径,配置构建路径,Java构建路径,库,JRE系统库,rt.jar,源代码连接。编辑“源代码连接”,设置“外部文件”的路径为JDK安装路径下的src.zip。

(2)equals方法和
的区别
==:用于数值的比较,比较的是两个字符串的地址值

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

运行结果:
str1 == str2 --> false
str1 == str3 --> false
str2 == str3 --> true
str1 == str4 --> true

equals()方法:用于内容的比较,比较两个字符串内容是否相等

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

运行结果:
str1 equals str2->true
str1 equals str3->true
str2 equals str3->true
str1 equals str4->true
2.2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
(1)什么是构造方法?
构造方法用于在创建对象时对其进行初始化。

Person per = new Person() ;  

(2)什么是构造方法的重载?
方法的重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。
(3)下面的程序是否可以通过编译?为什么?

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

此程序不能运行,因为没有定义构造函数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.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。

import java.math.BigDecimal;
public class Text {
	public static void main(String[] args) {
		double a = 0.1;
        double b = 0.1;
        double c = 0.1;
        double sum=0;
        sum=MyMath.round(MyMath.add(a, b, c),1);
        if(sum == 0.3){
            System.out.println("等于0.3");
        }else {
            System.out.println("不等于0.3");
        }

	}
}
class MyMath{
	public static double round(double d,int len){
		BigDecimal a=new BigDecimal(d);
		BigDecimal b=new BigDecimal(1);
		return a.divide(b,len,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	public static double add(double a1,double b1,double c1){
		BigDecimal a=new BigDecimal(a1);
		BigDecimal b=new BigDecimal(b1);
		BigDecimal c=new BigDecimal(c1);
		return a.add(b).add(c).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 Gaicuo {
    public static void main(String[] args) {
        MyClass[] arr={new MyClass(),new MyClass(),new MyClass()};
        arr[1].value=100;
    }
}
class MyClass{
	int value=1;
}


5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)
String类对象一旦产生便不能修改,StringBuffer类对象可修改
6.其他需要总结的内容。
(二)实验总结
实验内容:
1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
程序设计思路:用一维数组实现成绩的输入,然后分别定义求最大值、最小值与平均数的方法求出取出最高分与最低分的平均分,最后用冒泡排序将成绩从高到低输出
问题:数组的动态赋值出现问题
原因:没有掌握好数组赋值的基础知识
解决方案:查阅老师的课件
(三)代码托管(务必链接到你的项目)
https://git.oschina.net/hebau_cs15/Java-CS02yxy.git

posted @ 2017-03-28 15:01  ATM打小怪受  阅读(199)  评论(0编辑  收藏  举报