测试错题总结

本文探讨了Java程序的基础概念,如JDK与JRE的区别,数据类型转换规则,main方法的定义,以及身份证号码校验的实现。重点介绍了强制类型转换、三目运算符的规则和代码实例,适合初学者理解Java编程基础和实践应用。
摘要由CSDN通过智能技术生成

第一次测试

选择题

1.JDK

java程序的运行只需要有jre环境就可以

JDK:java的开发文件,其中包括了JRE

JRE:java的运行文件

不同的操作系统安装的JDK是不一样

2.数据类型
  1. a = 1.2 其中1.2为double类型

  2. float类型,需要在数值后面加上f/F 即:float num = 1.23F 或 float num = 1.23f;同理long类型,需要在后面加上L或l

  3. int无法转化成long,double无法转化成float

  4. 如果整数大于2147483647, 则该整数为long类型

  5. byte的取值范围为-128~127,当超过该范围时,编译会报错

  6. byte b = (byte)4096; byte的取值范围为-128~127, 这里是对byte进行强制转化,会造成精度丢失,但编译不会报错;此时的byte只存储低八位的数据(即转化为二进制后的后八位数据)

    4096的二进制表达为:1000000000000

    强制转化后byte会存储后八位,即此时byte的值为0,出现精度丢失

  7. main()方法的返回类型为void static是修饰符

  public class Main{
      public static void main(String[] args){
          byte b1 = 1;
          byte b2 = 2;
          byte b = b1+b2;
      }
  }

此代码会出现编译报错

原因:JVA是32位,其最小单位为int,没有byte,short,b1、b2存储的数据在JVA中会发生隐式转换,将其的数据类型转换成int,因此,b1+b2的类型为int,而int无法转换成byte

  1. 三目运算符的返回值类型由容量高的决定
public class Code{
    public static void main(String[] args){
        int x=4;
        System.out.println("value is "+((x>4)?99.9:9));
    }
}

输出的结果为:value is 9.0

3.编译
public class MyMain{
    public static void main(String args){
        System.out.println("Hello World");
    }
}

此代码不会编译报错,但在运行时会显示没有正确定义main方法

main方法的正确定义:public static void main(String[] args){}

4.代码运行
1. do-while

先执行,后判断

public class Test{
    public static void main(String[] args){
        int i= 5;
        do{
            System.out.print(i);
        }while(--i>5);
        System.out.print("finished");
    }
}
  1. 先输出i
  2. 执行循环的条件语句 --i>5
  3. 打印finished
2. switch

无break语句会一直向下执行到结束(switch语句的穿透性)

//语句1
int i=10,j=18,k=30;
switch(j-i){//j-i=18
    case 8: k++; //k:31
    case 9: k+=2; //k:33
    case 10: k+=3; //k:36
    default: k/=j; //k:2
}

执行语句1后,k的值为:2

//语句2
int i=10,j=18,k=30;
switch(j-i){//j-i=18
    case 8: 
        k++;
        break;//k:31
    case 9: k+=2; 
    case 10: k+=3;
    default: k/=j;
}

执行语句2后,k的值为:31

3.与或

逻辑运算中的短路与(&&):(与:若一个为false,则整个都为false)若第一个表达式为false 则后面的表达式不会运行;若第一个为true,则继续向后运行

逻辑运算中的短路或(||):(或:若一个为true,则整个都为true)若第一个表达式为true 则后面的表达式不会运行;若第一个为false,则继续向后运行

public class Test{
    public static void main(String[] args){
        int x=1,y=1,z=1;
        if(x--==1&&y++==1||z++==1)
            System.out.println("x="+x+",y="+y+",z="+z);
    }
}

输出结果:

x=0,y=2,z=1

原因:

  1. x-- 先将x的值赋给x–,在执行x-1的操作,此时(x–)=1,x=0;y同理

  2. x–==1&&y++==1 为true,因此发生短路,z不执行,因此z=1

编程题

验证身份证号码的正确性 IdCardDemo.java

身份证第18位(校验码)的计算方法 :

  1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

  2. 将这17位数字和系数相乘的结果相加。

  3. 用加出来和除以11,看余数是多少?

  4. 余数只可能有 0-1-2-3-4-5-6-7-8-9-10这11个数字。

    其分别对应的最后一位身份证的号码为
    
    1-0-X-9-8-7-6-5-4-3-2。 
    
  5. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码。

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入您的身份证:");
        //系数
        int[] rate = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
        int sum = 0;
        String idCard = input.next();
        for (int i = 0; i < idCard.length()-1 ; i++) {
            //获取每一位的字符
            int num = idCard.codePointAt(i) -48;
            sum += num*rate[i];
            //System.out.println((int)c - 48);//得到的字符的ASCII编码
        }
        int mod = sum % 11;
        //获取身份证最后一位 //
        //System.out.println((int)'X');
        //'X'的编码 88
       int lastno = idCard.codePointAt(17);
       char[] code = { '1','0','X','9','8','7','6','5','4','3','2'};
       if(lastno == (int)code[mod]){
           System.out.println("正确的");
       }else{
           System.out.println("错误的");
       }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值