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