• 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	"+(str1==str2));
    	System.out.println("str1==str3	"+(str1==str3));
    	System.out.println("str3==str2	"+(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	"+(str1.equals(str2)));
    	System.out.println("str1 equals str3	"+(str1.equals(str3)));
    	System.out.println("str3 equals str2	"+(str3.equals(str2)));
    
       }
    }
    

    输出结果:

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

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

    此程序不能通过编译,图中所示位置缺少参数。
    构造方法及构建方法的重载:
    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)的实际答案是:

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

    为了处理精度损失的问题,可以使用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;
    }

    运行结果:

    修改后:未按照数组方式来定义

    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类:

    StringBufffer类:

    由两时间比较,使用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号选手得分为
    ",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历史截图

  • 相关阅读:
    树套树
    Luogu P2839 [国家集训队]middle
    苟随笔
    BJOI2014 大融合
    轻量树上问题选做
    sb的斜率优化笔记
    CDialogEx::OnPaint()的问题,或者为什么在对话框程序的OnPaint中绘图无效的问题
    VC6的工程转到VC2010或更高版本出现fatal error C1189编译错误的解决方法
    C语言实现的反转字符串
    在终端输入npm run serve时出现npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! test_vue_0613@1.0.0 dev: 错误的解决方法
  • 原文地址:https://www.cnblogs.com/zhaotong189800/p/6635956.html
Copyright © 2020-2023  润新知