第一次测试
选择题
1.JDK
java程序的运行只需要有jre环境就可以
JDK:java的开发文件,其中包括了JRE
JRE:java的运行文件
不同的操作系统安装的JDK是不一样的
2.数据类型
-
a = 1.2 其中1.2为double类型
-
float类型,需要在数值后面加上f/F 即:float num = 1.23F 或 float num = 1.23f;同理long类型,需要在后面加上L或l
-
int无法转化成long,double无法转化成float
-
如果整数大于2147483647, 则该整数为long类型
-
byte的取值范围为-128~127,当超过该范围时,编译会报错
-
byte b = (byte)4096; byte的取值范围为-128~127, 这里是对byte进行强制转化,会造成精度丢失,但编译不会报错;此时的byte只存储低八位的数据(即转化为二进制后的后八位数据)
4096的二进制表达为:1000000000000
强制转化后byte会存储后八位,即此时byte的值为0,出现精度丢失
-
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
- 三目运算符的返回值类型由容量高的决定
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");
}
}
- 先输出i
- 执行循环的条件语句 --i>5
- 打印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
原因:
-
x-- 先将x的值赋给x–,在执行x-1的操作,此时(x–)=1,x=0;y同理
-
x–==1&&y++==1 为true,因此发生短路,z不执行,因此z=1
编程题
验证身份证号码的正确性 IdCardDemo.java
身份证第18位(校验码)的计算方法 :
-
将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
-
将这17位数字和系数相乘的结果相加。
-
用加出来和除以11,看余数是多少?
-
余数只可能有 0-1-2-3-4-5-6-7-8-9-10这11个数字。
其分别对应的最后一位身份证的号码为 1-0-X-9-8-7-6-5-4-3-2。
-
通过上面得知如果余数是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("错误的");
}
}
}