Java第二次作业

《Java技术》第二次作业

(一)学习总结

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

解:截图如下:

equals方法主要是针对字符串的比较,而==则是针对int型的数据进行比较。例如:

(1)、equals的使用

import java.
String a='十';
String b='十';
String c='二十';
if(a.equals(b)){
	System.out.println("");
}
if(a.equals(c)){
	System.out.println("");	
}

(2)、==的使用

int a=10;
int b=10;
int c=20;
if(a==b){
	System.out.println("10等于10");
}
if(a==c){
	System.out.println("10等于20");
}
2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
public class Test {
public static void main(String args[]) { 
	Foo obj = new Foo();       
	}     
}
class Foo{
	int value;
	public Foo(int intValue){
    	value = intValue;
	}
}

解:(1)、构造方法

构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。

(2)、构造方法的重载

方法的重载就是方法名称相同,但参数的类型和参数的个数不同。通过传递参数的个数及类型的不同可以完成不同功能的方法调用。
这就可以推出构造方法的重载就是与类同名、没有返回值类型、参数类型和参数个数不同。

程序不能通过编译

因为没有传参

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");
    	}
	}     
}

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

解:运行结果为“不等于0.3”

因为double类型小数部分还有其他,虽然显示0.1,但不完全是,未显示部分有其他小数位,三个0.1相加后就不等于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;
}

解:

一般报java.lang.NullPointerException的原因有以下几种:

·字符串变量未初始化;

·接口类型的对象没有用具体的类初始化

这里是字符串变量未初始化。更改如下:

5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)

解:应该用StringBuffer类。String和StringBuffer都是对一串字符进行操作,但String是不可变类,而StringBuffer是可变类。StringBuffer会比String性能好。

(二)实验总结

1.评分系统

  • 程序设计思路:

主函数是双重循环,主要负责输入五名选手的十个成绩,并通过在内层循环中调用函数实现功能;

子函数max求出最高分并返回;

子函数min求出最低分并返回;

子函数average求出平均分并返回;

子函数sortArray负责把输入成绩中的最高分和最低分去掉,然后赋值给新数组,新数组再从小到大排序,返回首地址,在主函数中输出。

  • 实验问题分析:

问题1:字符串的输出不能加+,我加了以后它提示“未对参数类型String定义运算符+”

原因:这和C是一致的

解决方案:去掉加号就好

问题2:当输入两个相同的最高分和最低分时,怎样让系统只去掉一个最高分和一个最低分

原因:刚开始用的是判断,如果输入的成绩中有和最高分最低分相等的数值,就跳过,对下一个数判断

解决方案:流程图派上了大用场。我刚开始想的是将最高和最低分开判断,加标记,若标记改变则不再再次执行跳过,但总有地方出错,因为如果第一个就是最高分或最低分,我要跳过赋值就只能将数组下标前移,但这样一来就会越界,所以我先判断是不是最高或最低分,若不是则赋值,若是则标记位加一,再判断标记位是否为一,若不为一则证明不是第一个,赋值;若是一就跳过。

2、验证email地址

问题2:我用到了字符串转换为字符数组的方法toCharArray,刚开始不太会,输出数组时老是加加号,导致它运行出来都是数字

原因:加号可以将单个字符转换为对应数值

解决方案:去掉加号就是字符了。看来不论是字符串还是单个字符都不能在输出里加"+"。

问题2:注意条件二和条件三的包含关系,在“@”在“.”的前面的前提下,“@”不能位于开头

原因:加号可以将单个字符转换为对应数值

解决方案:去掉加号就是字符了。看来不论是字符串还是单个字符都不能在输出里加"+"。

(三)代码托管

  • 码云commit历史截图

(四)学习进度条

代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
目标 5000行 300小时
第2-4周 202/300 学习了....
第5周 190/392 字符串和数组
第6周
posted @ 2017-03-26 21:35  许琳13号  阅读(301)  评论(0编辑  收藏  举报