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周 |