java第二次作业

Java第二次作业

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

使用“==”比较字符串的内容所比较的是字符串的内容和地址,若使用“==”对str1和str2两字符串进行比较,则发现比较双方不相等。

public class Stringzt {
public static void main(String[] args){
    String str1=new String("ABC");
    String str2=new String("ABC");
    String str3=str2;
    System.out.println("str1==str2\t"+(str1==str2));
    System.out.println("str1==str3\t"+(str1==str3));
    System.out.println("str3==str2\t"+(str3==str2));

     }
} 


输出结果:

    str1==str2  false
    str1==str3  false
    str3==str2  true

输出结果:

使用equals对两者进行比较的话,则比较的仅仅是两字符串的***内容***,内容相等,则双方相等。

public class Stringzt {
public static void main(String[] args){
    String str1=new String("ABC");
    String str2=new String("ABC");
    String str3=str2;
    System.out.println("str1 equals str2\t"+(str1.equals(str2)));
    System.out.println("str1 equals str3\t"+(str1.equals(str3)));
    System.out.println("str3 equals str2\t"+(str3.equals(str2)));

   }
}

输出结果:

str1 equals str2    true
str1 equals str3    true
str3 equals str2    true

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

此程序不能通过编译,图中所示位置缺少参数。
构造方法及构建方法的重载:
2.2构造方法的格式如下:

class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2){
    程序语句:
    ...
}

}
2.3只要每个构造方法的参数类型或参数数量不同时,就可以实现构造方法的重载。
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
(a+b+c)的实际答案是:
1081503-20170327133706608-1159436978.png

其原因是精度不够,不能直接进行加法运算。

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

 import java.math.BigDecimal;
public class test {
public static void main(String args[]) { 
          BigDecimal a = new BigDecimal ("0.1");
          BigDecimal b = new BigDecimal ("0.1");
          BigDecimal c = new BigDecimal ("0.1");     
          if(a.add(b).add(c).doubleValue()==0.3){
             System.out.println("等于0.3");
          }else {
              System.out.println("不等于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;
}

运行结果:
1081503-20170327230321498-1843039388.png
修改后:未按照数组方式来定义

public class Test {
public static void main(String[] args) {
    MyClass arr=new MyClass();
    arr.value=100;
}

}
class MyClass{

public int value=1;

}

5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)
String类:
1081503-20170328082729139-1784900137.png
StringBufffer类:
1081503-20170328083743014-1733521395.png
由两时间比较,使用StringBuffer的时间相对来说要比String少,运行速度要快。

6.其他需要总结的内容。好多细节以前没有注意到,比如声明的方法,精度问题之类的。数组,字符串也突然间感到不太熟悉了。

(二)实验总结
实验内容:

1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
设计思路:
设置一个Scanner类进行输入数组的数据。两个for的循环,10个评委依次为5个选手评分,对每次进行依次输入分数。

Scanner sc=new Scanner(System.in);
    
    for( i=1;i<6;i++){
        int score1[]=new int[10];
        System.out.printf("10位评委各个为第%d号选手得分为\n",i);
        for( j=1;j<11;j++){
            score1[i]=sc.nextInt();
        }
     } 

然后依次设了求平均分数函数(去掉一个最高数和一个最低数之后求8个评委所评分数)public static double avg(int score[])考虑到平均数的精度问题所以设成double类同时调用函数max(score)min(score)用来减去一个最高数和一个最低数。其他函数的分别调用为public static double max(int score[]),public static double min(int score[]),public static Object[] sort(int score[])
出现的问题:函数的调用问题及程序不能顺利运行,出现很多错误。
2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾 )
设计思路:使用boolean方法进行判断,如果依次符合A,B,C,D的条件。则判为正确进行下一步。

boolean  test=false;
  if(str1.startsWith("@"))
  {test=false;}
  else{test=true;}
         
  if(test){System.out.println(str1+"为正确格式");}
  else{System.out.println(str1+"为错误格式");

出现的问题:我嵌套使用此方法不仅麻烦凌乱而且有局限性问题很大,由于没有想到其他解决方法,所以没解决此问题。
3.统计文件:输入一个字符串,包含各种文件类型的文件名。文件名之间用“,”分隔,要求将各个文件名的首字母大写后分别输出,并统计各种类型文件的文件个数。
设计思路:我想的是先建立一个String 型的str1的字符串,各文件名之间用逗号隔开,然后使用String s[]=str1.split(",")方法拆分成个体文件名以数组的方法分别输出。使用s[i].toUpperCase(0,1)方法将文件类型名首字母大写,用s[i].indexOf(".exe")方法将个文件分类。
出现的问题:出现问题太多,没写完。

4.身份证识别:(未完成)公民身份证号码由十八位数字组成。从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。顺序码的奇数分配给男性,偶数分配给女性。编写一个识别身份证基本信息的小工具,输入一个居民身份证号,则输出居民所属省份(直辖市、自治区),生日(格式:xxxx-xx-xx)和性别信息。

(三)代码托管(务必链接到你的项目)

码云commit历史截图
1081503-20170328173218404-1030722374.png

转载于:https://www.cnblogs.com/zhaotong189800/p/6635956.html

第二次作业: 1. 编写点类(Point类),属性成员有x,y,都是double数据类型。需要为Point类编写构造函数。 编写直线类(Line类),需要提供两点确定一条直线的函数功能。 如果两点重合,可以返回异常或者返回null引用来解决这个问题。 直线类的数据成员和函数成员请自行设计。 2. 给定文本文件,文件名称为a.txt,文件内容为一个8行8列的字符矩阵,内容为1和0字符, 请编程计算出该矩阵中水平方向或者垂直方向或者斜线方 向连续1最多的个数。 例如: 11001101 10110101 01010101 11001000 01010101 11001101 00011000 11110000 3. 编写程序求出1万以内的所有素数,并将这些素数输出到一个文本文件中,每行文本只包含一个素数数据。 该文本文件内容要求可以用记事本程序来查看。 4. 编写程序求出1万以内的所有素数,然后再判断这些素数中哪些是由素数拼接而成的。 例如素数23就符合条件,23本身是素数,其由素数2,和素数3拼接(连接)组成。 素数29就不满足条件,2是素数,而9不是素数。素数307不满足条件,不能忽略0. 7907这个素数符合条件,7是素数,907是素数。 需要把符合条件的拼接素数全部输出,并统计个数。 5. 要求从控制台输入英语单词及单词解释两项数据, 把录入的数据追加到文件中。要求提供单词查询功能。 用户输入单词后,从单词库文件中查找,如果存在则输出 该单词的解释。注意,单词不能有重复,如果重复则覆盖替换 以前的解释数据。 6. 通过命令行参数输入一个文件夹的路径名称,然后编写程序找出该文件夹下文件名称重复并且文件大小也一样的文件, 如果没有“重复文件”,则输出“没有重复文件”的提示,如果有,需要输出文件名称,和文件所在的文件夹路径(绝对路径)。 提示,需要遍历该文件夹下所有子文件夹,设计一个文件类,属性包括文件名称,文件路径,文件大小,然后进行“重复” 判断,如果文件重复,则需要记录并输出,有可能有文件名重复,但是文件大小不一样,重复的文件可能不止2个,可能 在不同的子文件夹下有多个文件重复。 7. 霍夫曼编码实现压缩文本文件,见文件huffman.rar. 对文件数据读写等功能已经实现,程序在Q2Resources.zip中。 Q2Resources.zip中的文件禁止修改。请将TextZip.java文件所有未实现的函数按照要求给以实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值