Java实验二 计算机 1501 王奕开 18

1.equals()方法
1080047-20170327131135045-549298938.png
而“==”是比较int,double......等类型的数值是否相等。

2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
(1). 构造方法是一种特殊的方法,方法名称要和类的名称一样,主要功能就是完成对象的初始化,当类实例化对象的时候进行调用。
(2).所谓的方法重载就是方法名称相同,但参数类型和参数个数不同。
(3).

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

不可以通过编译,在主函数中,构造的方法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");
        }
    }     
}

用一个double类型的sum去输出“a+b+c”的值sum=0.30000000000000004
double类型是64位精度在14位以下,如果超出精度范围 ,就会不准。
正确改法:

package org.lxh.demo11.numberdemo;
import java.math.BigDecimal;
public class test {
        public static void main(String args[]) { 
            double a = 0.1;
            double b = 0.1;
            double c = 0.1;
            double sum=0;sum=Mymath.round(Mymath.add(a,b,c),1);
            System.out.println("值为"+sum);
        }
    }
  class Mymath{
    public static double round(double a,int len){
          BigDecimal b1=new BigDecimal(a);
          BigDecimal b2=new BigDecimal(1);
          return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
      }
      public static double add(double num1,double num2,double num3){
          BigDecimal a=new BigDecimal(num1);
          BigDecimal b=new BigDecimal(num2);
          BigDecimal c=new BigDecimal(num3);
          return a.add(b).add(c).doubleValue();
      }
  }

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()};
        arr[1].value=100;
    }
}
class MyClass{
    public int value=1;
}
  1. 应用StringBuffer类进行10000次连接操作,String赋值后就不可更改,而StringBuffer类使用append等方法改变字符串的值。
    6.定义数组后,里面必须有值,不能为空。
    (二)实验总结
    1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。
    a.程序设计思路:连续输入5个人的成绩,排序后,去掉数组中第一个和最后一个值,平均分按照降序,输出从最后一个开始输出。
    b.实验问题分析:
    问题:检验时用了一个数组一开始无法输出
    原因:后来通过查资料发现,数组里面必须全部赋值才能输出。
    解决方案:全部输入数据,再做查询

    import java.util.Scanner;
    public class shiyan1{
    public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    int [][] score;
    int z;
    int sum = 0;
    double [] averageScore;
    averageScore=new double[5];
    score=new int [5][10];
    double [] finalScore;
    finalScore=new double[5];
    for(int i=0;i<score.length;i++){
    for(int j=0;j<score[i].length;j++){
    System.out.println("给第"+(i+1)+"个人打分:");
    score[i][j]=in.nextInt();
    }
    }
    for(int k=0;k<score.length;k++){
    for(int m=0;m<score[k].length;m++){
    z=m;
    for(int o=m+1;o<score[k].length;o++){
    if(score[k][o]>score[k][z]){
    z=o;
    }
    if(z!=o){
    int temp=score[k][m];
    score[k][m]=score[k][z];
    score[k][z]=temp;
    }
    }
    }
    }
    for(int p=0;p<score.length;p++){
    for(int q=0;q<score[p].length;q++){
    if(q==0||q==9){
    score[p][q]=0;
    }
    }
    }
    for(int t=0;t<5;t++){
    for(int y=0;y<10;y++){

                 sum=sum+score[t][y];
                 if(y==9){
                 averageScore[t]=sum/8.0;
                 }
             }
    
         }
         for(int g=0;g<5;g++){
             finalScore[g]=averageScore[g];
         }
         for(int k=1;k<finalScore.length;k++){
             for(int h=0;h<finalScore.length;h++){
                 if(finalScore[k]<finalScore[h]){
                     double temp=finalScore[h];
                     finalScore[h]=finalScore[k];
                     finalScore[k]=temp;
                   }
             }
         }
         for(int j=4;j>=0;j--){
             System.out.println(finalScore[j]);
         }
     }

    }

2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾)
a.程序设计思路:通过比较@和.的位置,判断是否正确。在判断尾号是什么结尾,是否符合要求中的6个的之一。
b.实验问题分析:
没有遇见问题

import java.util.Scanner;
public class youxiang {
    public static void main(String []args){
        System.out.println("请输入邮箱:");
        Scanner scan=new Scanner (System.in);
        String strEmail=scan.next();
        int ret=yanzheng(strEmail);
        if(ret==1){
            System.out.println("地址有效");
        }
        else{
            System.out.println("地址无效");
        }
    }
    public static int yanzheng (String str){
            int a=str.indexOf("@"); 
            int b=str.indexOf(".");
            if((a!=-1&&b!=-1&&a<b&&a!=1)&&(str.endsWith("com")!=false||str.endsWith("cn")!=false||str.endsWith("net")!=false||str.endsWith("gov")!=false||str.endsWith("edu")!=false||str.endsWith("org"))){
                
                return 1;
            }
            else{
                return 0;
            }       
    }
}

3.统计文件:输入一个字符串,包含各种文件类型的文件名。文件名之间用“,”分隔,要求将各个文件名的首字母大写后分别输出,并统计各种类型文件的文件个数。
a.程序设计思路:取第一个字母,将其通过函数变为大写,在通过“,”把字符串分开,在通过"."把文件的格式分离出来,存放到字符串数组里,通过字符串数组,比较有多少种文件。
b.实验问题分析:
问题1:一开始不知道怎么变大写
解决方案:后来看书发现,可以先将第一个字符取出存到一个数组,再将数组大写后放回去。
问题1:输出重复
解决方案:减少了输出,但还是有重复的,不太会改。

import java.util.Scanner;
import java.lang.StringBuffer;
public class zifuchuantongji {
    public static void main(String []args){
        String str=scan();
        System.out.println("字符串为:"+str);
        String str1[]=print_(str);
        fenlei(str1);
        
    }
    public static String scan(){
        Scanner scan=new Scanner  (System.in);
        System.out.println("请输入字符串:");
        String str=scan.next();
        return str;
    }
    public static String[] print_(String str){
        String[] s=str.split(",");
        for(int i=0;i<s.length;i++){
            StringBuffer bur =new StringBuffer(s[i]);
            String word=bur.substring(0,1); 
            s[i]=bur.replace(0,1,word.toUpperCase()).toString();
            System.out.println(s[i]);
        }
        return s;
    }
    public static void fenlei(String []str){
        String a[]=new String[5];
        String c=null;
        for(int i=0;i<str.length;i++){
            a[i]=str[i].substring(str[i].indexOf("."),str[i].length());
        }
        for(int j=0;j<a.length;j++){
            int n=0;
            for(int y=0;y<a.length;y++){
                if(a[y].equals(a[j])==true){
                 n++;c=a[y];
                }
            }
                System.out.println(c+"一共有"+n+"个");
        }
    }
} 

4.4.身份证识别:公民身份证号码由十八位数字组成。从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。顺序码的奇数分配给男性,偶数分配给女性。编写一个识别身份证基本信息的小工具,输入一个居民身份证号,则输出居民所属省份(直辖市、自治区),生日(格式:xxxx-xx-xx)和性别信息。
a.程序设计思路:输入前两位,并在数组里寻找地址,取出生日,取出生日后面三位,用函数,将其变为int型,在判断奇偶性,看看是男是女。
b.实验问题分析:
问题:不会判断男女
解决方案:分别将3位数字取出,存到一个字符串里,然后在通过Integer.parseInt()函数转化成int型

package shenfenzheng;
import java.util.Scanner;
public class shenfenzheng {
        public static void main(String[]args){
            String dress[][]={
                    {"","北京市","天津市","河北省","山西省","内蒙古自治区"},
                    {"","辽宁省","吉林省","黑龙江省"},
                    {"","上海市","江苏省","浙江省","安徽省","福建省","江西省","山东省"},
                    {"","河南省","湖北省","湖南省","广东省","广西壮族自治区","海南省"},
                    {"重庆市","四川省","贵州省","云南省","西藏自治区"},
                    {"","甘肃省","青海省","宁夏回族自治区","新疆维吾尔自治区"},
            };
            Scanner scan =new Scanner(System.in);
            System.out.println("请输入身份证号:");
            String str=scan.next();
            if(str.length()>18){
                System.out.println("身份证号无效!");
            }
            char x=str.charAt(0);
            char y=str.charAt(1);
            int  num1=(int)x-48;
            int  num2=(int)y-48;
            System.out.println("省,直辖市:"+dress[num1-1][num2]);
            System.out.println("生日为:"+str.substring(6,10)+"-"+str.substring(10,12)+"-"+str.substring(12,14));
            String s=str.substring(15,17);
            int num=Integer.parseInt(s);
            num=num/100;
            if(num%2==0){
                System.out.println("性别:男");
            }
            else{
                System.out.println("性别:女");
            }
            }
    }

(三)代码托管
1080047-20170327122214279-1267913904.png
码云地址:https://git.oschina.net/wangyikai1996/shiyaner.git
(四).学习进度条
1080047-20170327130835608-52955249.png

转载于:https://www.cnblogs.com/494625951-wangyikai/p/6626328.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值