Java技术第二次作业

时间:2022-09-05 21:53:14

《Java技术》第二次作业

(一)学习总结

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

java.lang.String.equals() 方法比较字符串与指定的对象。其结果是true当且仅当参数不为null,并且是一个String对象,这个对象表示相同的字符序列声明
声明java.lang.String.equals()方法
public boolean equals(Object anObject)

equals()方法与==的区别,equals()方法比较的是字符串的内容,而==比较的是字符串存储的地址参数,此方法返回true如果给定对象代表一个字符串,这个字符串,否则返回false

实例
下面的例子显示使用的java.lang.String.equals()方法

package com.pieryon;  

import java.lang.*;

public class StringDemo {

public static void main(String[] args) {

String str1 = "sachin tendulkar";
String str2 = "amrood admin";
String str3 = "amrood admin";

// checking for equality
boolean retval1 = str2.equals(str1);
boolean retval2 = str2.equals(str3);

// prints the return value
System.out.println("str2 is equal to str1 = " + retval1);
System.out.println("str2 is equal to str3 = " + retval2);
}
}

编译和运行上面的程序,这将产生以下结果:
str2 is equal to str1 = false
str2 is equal to str3 = true

2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?

  1. 构造方法与类名相同,没有返回类型,在类初始化时调用,为类中的属性初始化。

  2. 构造方法的重载与方法的重载相同,方法名称相同,参数类型或个数不同,用于完成不同功能.
    public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } }
  • 不能通过编译,原因是在有参构造方法中没有传递一个参数,应该在Foo obj = new Foo()中添加一个参数,如:Foo obj = new Foo(10);

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”

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 Test {
public static void main(String[] args) {
MyClass[] arr=new MyClass{new MyClass(),new MyClass(),new MyClass()};
arr[1].value=100;
}
}
class MyClass{
public int value=1;
}

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

应该使用StringBuffer类。
因为Strin类表示字符串常量且内容和长度不能修改但是StringBuffer类表示字符变量且内容和长度可以被修改,效率更高
Strin类
Java技术第二次作业
StringBuffer类

(二)实验总结

1.评分系统

  • 程序设计思路:首先声明整型数组grade,为整型数组grade分配内存空间,其元素个数为5,grade为评委打分。运用循环输入每个选手的所有分数。然后求分数中的最大值,最小值。总数减去最大值最小值求平均分。再将分数总和减去最大值最小值除以4得出平均分,存到另一个数组中,最后将平均分排序倒序输出。
  • 实验问题分析:
    问题1:输出的数组排序不正确
    原因:不会运用java的数组排序
    解决方案:Arrays.sort(avgl);
    问题2:后面排序数组的时候,数组没有识别
    原因:数组定义在了上一个循环的里面的
    解决方案:将数组的定义放在循环外面。
    2.邮箱验证
  • 程序设计思路:输入一串字符串,用if语句进行判断
    实验问题分析:
    问题1:判断条件没有实现?
    原因:判断条件出现问题
    解决方案:if (cond1 != 0 && cond2 != 1&& cond2 != 0 && cond1 < cond2 && cond1 != 0){
    /如果cond1值为-1,说明@不存在;如果cond1值为1,说明@开头;如果cond1 < cond2,说明 @ 在 . 的前面/

3.身份证验证
程序设计思路: 把省市放在一个二维数组中,截取身份证号的前两位存放到数组中,输出数组中对应的省份;,截取出生日期按要求输出;用第17位和2求余,结果余0为女生,余1为男生。
实验问题分析:
问题1:输出不了年月日
原因:类型不对
解决方案:强制转换int a=Integer.parseInt(strsex);
问题2:不会判断省份
原因:不会使用二维数组
解决方案:`
String x[][]= {{"北京市","天津市","河北省","山西省","内蒙古"},
{"辽宁省","吉林省","黑龙江省"},
{"上海市","江苏省","浙江省","安徽省","福建省","江西省","山东省"},
{"河南省","湖北省","湖南省","广东省","广西","海南省"},
{"重庆市","四川省","贵州省","云南省","*"},
{"陕西省","甘肃省","青海省","宁夏","*"}};

        System.out.println("籍贯是 "+x[b-1][d-1]);
}`

(三)[代码托管]http://git.oschina.net/hebau_cs15/java-CS02szy/tree/master/

  • 码云commit历史截图
    Java技术第二次作业

    (四)学习进度条

    代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
    目标 5000行 300小时
    第2-4周 300/300 30/30 学习了java前两章
    第5周 300/300 30/30 学习了重载和输入
    第6周