java第二次实验作业

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

1080029-20170327163714764-41405292.png

1080029-20170327163723764-1492964135.png
Eclipse关联jdk源代码的方法如上图所示

举例说明equals方法和==的区别
1080029-20170327163924420-1057812401.png

1080029-20170327163933654-449789922.png

如图所示 ‘==’比较的是字符的地址 而‘equals’比较的是字符串的内容

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

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

构造方法就是与类同名的那个方法,它的作用是可以用来初始化
重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
构造方法可以重载。
上述程序并不能翻译 因为在Foo类中定义int型的value, Foo obj = new Foo()没有传递参数。 需要对Foo(int)进行传参。

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中的简单浮点数类型float和double不能够进行运算,在大多数情况下,计算的结果是准确的,但进行多次运算或者循环运算经常出错,double属于floating binary point types,也就是说都double型的数值在相加减的时候,会将数值转换成二进制的数值如10001.10010110011这种表示发再做相加减,但是在转换成二进制代码表示的时候,存储小数部分的位数会有不够的现象,即无限循环小数,这就是造成微差距的主要原因。
package org.lxh.demo11.numberdemo;
import java.math.BigDecimal;
public class BigDecimalDemo01 {

public static void main(String[] args) { 

    BigDecimal bi1=new BigDecimal ("0.1");
    BigDecimal bi2=new BigDecimal ("0.1");
    BigDecimal bi3=new BigDecimal ("0.1");
    BigDecimal c= new BigDecimal("0.3"); 
    bi2=bi1.add(bi1.add(bi1));
    if(bi2.compareTo (c)==0){
        System.out.println("等于0.3");
    }else {
        System.out.println("不等于0.3");
    }
}
}    

定义BigDecimal类 如上 结果等于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;
}

结果 不能运行
原因 空指针异常
更改方法
package org.lxh.demo11.numberdemo;
public class Test {
public static void main(String[] args) {
MyClass[] arr={new MyClass(),new MyClass(),new MyClass()
};
arr[1].value=100;
}
}
class MyClass{
public int value=1;
}
5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)

首先 两种类的区别
(1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringBuffer类对象为可修改对象,可以通过append()方法来修改值
(2)String类对象的性能远不如StringBuffer类。
关于以上具体解释如下:
在java中有3个类来负责字符的操作。
1.Character 是进行单个字符操作的,
2.String 对一串字符进行操作。不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类。
String类

String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 10000;
long lstart1 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
str += tempstr;
}
long lend1 = System.currentTimeMillis();
long time = (lend1 - lstart1);
System.out.println(time);

String Buffer类

String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart2 = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times; i++) {
sb.append(tempstr);
}
long lend2 = System.currentTimeMillis();
long time2 = (lend2 - lstart2);
System.out.println(time2);
由以上两个程序测试得出结论 StringBuffer 的速度几乎是String 上万倍当然这个数据不是很准确

6.其他需要总结的内容。

(二)实验总结

实验内容:
1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
设计思路: 定义数组循环按照逻辑依次循环,并在其中求出最大值最小值,最终值为去掉最大值最小值的平均值
问题一:得分输出不正确,随机值
解决方法:定义double数组 将每次得分成绩放入数组
public class test{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int score[]=new int[10];

    int max=0;
    int min=0;
    int sum=0;
    double arv=0;
    
System.out.println("请评委打分:");
for(int i=1;i<5;i++){
    
System.out.println("请评委给第"+i+"选手打分:");

    
    for(int q=0;q<10;q++){
        int a=in.nextInt();
        score[q]=a;
    }
    max=min=score[0];
    for(int v=0;v<score.length;v++){
        
        if(score[v]>max){
            max=score[v];
        }
        if(score[v]<min){
            min=score[v];
        }
    sum=score[v]+sum;
    }
    arv=(sum-max-min)/8.0;
    double[] avg=new double[5];
    avg[i]=arv;
   System.out.println("最高分为"+max);
System.out.println("最低分为"+min);
System.out.println("最后得分为"+avg[i]);
    
}

2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾 )

设计思路:定义地址成功与否的返回值条件 在按照题目要求定义条件
问题:“@”和“。”判断错误
解决方案:if((a!=-1&&b!=-1&&a<b&&a!=1)) 进行一次判断

解决方案:XXXXXXX

(三)代码托管(务必链接到你的项目)
1080029-20170327214505342-1602163286.png

https://git.oschina.net/hebau_cs15/java-cs01hm.git

学习进度条
1080029-20170327215206951-871477393.png

转载于:https://www.cnblogs.com/hm2546914025-/p/6629032.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值