第2章Java的基本数据类型本章试验的主要任务是正确理解和掌握Java基本类型数据的使用方法,包括:掌握各种不同类型数据之间的转换规则、运算规则;学会使用Java运算符、表达式,掌握运算符的优先级、表达式的运算规则。
2.1 实验一:Java 的基本类型数据的应用1. 实验目的1) 了解Java的基本数据类型的特点;2) 掌握各种类型变量的声明、赋值、转换及运算方式。
2. 实验要求编写并实现程序,完成对基本类型变量的声明、赋值,并对变量进行简单运算输出运算结果。
3. 实验内容实验示例 2.1.1. 在程序中实现对整型变量的定义、赋值、运算并输出运算结果。
执行程序并分析运算结果。
使用Jcreator开发工具完成实验,其操作步骤如下:⑴执行JCreator,进入JCreator开发环境窗口;⑵为了方便起见,关闭一些视图窗口,只留下编辑和常规输出(Build Output)窗口(如图2-1所示);⑶执行“File”→“New”菜单下的“File…”项,在“File Wizard”对话框的文件名栏中输入“Practice2_1”,根据需要,可以改变文件路径。
一般来说,可以创建一个文件夹,用该文件夹来存放你开发程序,例如E:\javaTest;⑷新建文件后,在编辑窗口输入如图2-1中所示的java程序源代码;⑸完成代码的输入之后,执行“Build”菜单中的“Compile File”命令项或单击工具栏上的编译按钮编译源程序文件;⑹完成编译之后,执行“Build”菜单中的“Execute File”命令项或单击工具栏上的运行程序按钮执行程序。
执行结果如图2-2所示。
下边我们来分析一下程序及程序的输出结果:在程序中,定义了两个字节(byte)变量b1和b2、两个短整型(shortt)变量s1和s2、两个整型(int)变量i1和i2、两个长整数变量(long)l1和l2,并分别对它们进行了简单的赋值运算。
最后分别输出它们的十进制值,s1的二进制表示形式的值,l2十六进制表示形式的值。
对变量的赋值和输出,必须注意以下几点:①只能将整型同级或较低级变量的值和不超出允许范围的整常数赋给整型变量;若直接将浮点类型变量、浮点常数和超出范围的整常数值赋给整型变量,在编译时,将产生“可能损失精度”的错误。
图0-2 JCreator开发环境窗口②可以直接给变量赋予十进制或八进制或十六进制常数值,但在输出时,系统默认为10进制方式,若要以其他方式(2进制、8进制或16进制)输出,则必须使用相关封装类的相应方法转换完成。
例如,在程序中输出s1(300)的二进制表示形式的值使用了Integer类的toBinaryString()方法,输出l2(65535)十六进制表示形式的值使用了Long类的toHexString()方法。
图0-2 Practice2-1-1程序执行结果③为了输出结果的清晰性,一般在输出表达式中加入必要的文字描述,系统将采用字符串连接的方式进行输出。
实验示例 2.1.2. 在程序中实现对浮点变量的定义、赋值、运算并输出运算结果。
执行程序并分析运算结果。
实现本示例的操作步骤如下:⑴执行“File”→“New”菜单下的“File…”项,在“File Wizard”对话框的文件名栏中输入“Practice2_1_2”;⑵新建文件后,在编辑窗口输入如下的java程序源代码:/*这是一个简单的Java示例程序*它的功能是浮点数据类型变量之间的赋值、运算及转换输出*程序的名字为Practice2_1_2.java*/import java.io.*;public class Practice2_1_2{public static void main(String args[]){float f1,f2=100.569F; //定义4个字节长的浮点变量f1,f2,f2=100.569double d1,d2=0.187e+100; //定义8个字节长的双精度变量d1,d2,d2=0.187e+100 d1=(double)f2; //将f2的值强制转换为double值后赋给d1f1=(float)d2; //将d2的值强制转换为float值后赋给f1System.out.println("float变量: f1="+f1 + " f2="+f2);System.out.println("double变量: d1="+d1 + " d2="+d2);}}⑶完成代码的输入之后,执行“Build”菜单中的“Compile File”命令项或单击工具栏上的编译按钮编译源程序文件;⑷完成编译之后,执行“Build”菜单中的“Execute File”命令项或单击工具栏上的运行程序按钮执行程序。
执行结果如图2-3所示。
图2-3 Practice2_1_2程序执行结果下边我们来分析一下程序及程序的输出结果:在程序中,我们定义了两个单精度浮点(float)变量和两个双精度浮点(double)变量,并分别对其进行了赋值和输出处理。
从输出结果可以看出:①在把双精度变量的值赋给单精度变量时,采用了强制转换的方式,例如语句:f1=(float)d2;如前所述,系统不能自动将高类型数转换为低类型数,如果不进行强制转换,在编译源程序代码时,会出现编译错误,不能生成字节码文件。
需要指出的是,如果被转换的数值大于转换类型所表示的范围时,不能够获取其值。
如输出结果所示:f1=Infinity。
②在把单精度变量的值赋给双精度变量时,也采用了强制转换的方式,例如语句:d1=(double)f2;从输出结果可以看出,d1=100.56900024414062,而不是100.569,这是因为,在计算机中的浮点运算实际上是一种高度的近似计算,近似计算是有误差的。
这种误差在允许的范围之内。
强制转换的过程实质上是一个计算过程。
注意:只有同类型数才能进行运算。
自由训练2.1 阅读、输入下边的程序:/*这是一个简单的Java程序*它的功能是基本数据类型变量之间的赋值、运算及转换输出*程序的名字为Test2_1.java*/import java.io.*;public class Test2_1{public static void main(String args[]){int i1=200,i2; //定义4个字节长的整型变量i1,i2. i1=200float f1,f2=100.569F; //定义4个字节长的浮点变量f1,f2,f2=100.569double d1,d2=3456.24; //定义8个字节长的双精度变量d1,d2,d2=3456.24i2=f2; //将f2的值赋给i2f1=d2; //将d2的值赋给f1d1=i1; //将i1的值赋给d1System.out.println("int 变量: i1="+i1 + " i2="+i2);System.out.println("float变量: f1="+f1 + " f2="+f2);System.out.println("double变量: d1="+d1 + " d2="+d2);}}编译并执行程序,看有什么问题,若有问题,请解决问题并获得正确结果。
2.2 实验二:Java 的运算符及表达式的应用1. 实验目的1) 掌握Java的各种运算符的使用;2) 掌握表达式的组成、运算的优先次序、及表达式的值;2. 实验要求编写并实现简单的、包括一些运算的Java应用程序。
3. 实验内容在前边的实验中,使用JCreator开发环境,介绍了实现一个程序的详细步骤,在下边实验内容的介绍中,将不再重述建立文件等步骤,而直接以程序清单、程序运行和程序及结果分析等三步来进行。
实验示例2.2.1. 编写一个华氏和摄氏温度转换的程序。
温度转换关系的公式为:F=9/5*C+32其中C为摄氏温度,F为华氏温度。
实现本示例的操作步骤如下:⑴建立Java 程序文件Practice2_2_1.java。
程序清单如下:/*这是一个简单的Java示例程序*它的功能是华氏温度的计算*程序的名字为Practice2_2_1.java*/public class Practice2_2_1{public static void main(String[] arguments){float F,C; //定义存储华氏、摄氏温度的变量F=85f; //假设华氏温度为85度C=(F-32f)/9f*5f; //计算摄氏温度System.out.println("与"+F+"度华氏温度对应的摄氏温度是"+C+"度\n");C=40; //假定摄氏温度为40度F=9f/5f*C+32f; //计算华氏温度System.out.println("与"+C+"度摄氏温度对应的华氏温度是"+F+"度\n");}}⑵编译程序,然后执行程序,输出如图2-4所示的结果。
图2-4 Practice2_2_1程序执行结果⑶程序及程序的输出结果分析在程序中,直接为变量F(C)赋予常数值,然后套用计算公式确定相应的C(F)值。
由于将C和F定义为同一类型(float),所以在计算过程中不需要数值之间的转换。
在程序的语句表达式中使用了5f、9f这样的浮点常数,读者可以思考如下问题:表达式5f/9f 的结果是多少?值是多少,值的类型是什么?表达式5/9 的结果是多少?值是多少,值的类型是什么?表达式 5.0/9 的结果是多少?值是多少,值的类型是什么?实验示例2.2.2. 编写一个程序:判断一个整数,是奇数还是偶数,能否被3除尽。
实现本示例的操作步骤如下:⑴建立Java 程序文件Practice2_2_2.java。
程序清单如下:/*这是一个简单的Java示例程序*它的功能是计算一个整数的奇偶性,是否3的倍数*程序的名字为Practice2_2_2.java*/public class Practice2_2_2{public static void main(String args[]){int x=273; //整数x 赋值3boolean L1,L2 ; //定义布尔变量L1=x%2==0; //判断x是否偶数L2=x%3==0; //判断x是否3的倍数System.out.println(x+"是偶数吗?结果是: " +L1);System.out.println(x+"是3的倍数吗?结果是: " +L2);}}⑵编译程序,然后执行程序,输出如图2-5所示的结果。