《Java语言基础实验报告.doc》由会员分享,可在线阅读,更多相关《Java语言基础实验报告.doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.浙江大学城市学院实验报告课程名称 面向对象程序设计 实验项目名称 Java 语言基础实验 学生姓名 专业班级 学号 一. 实验目的和要求 1. 掌握 Java 语言的基本数据类型、字符串、数组2. 掌握 Java 语言的运算符、表达式、语句3能够编写 Java 应用程序二. 实验内容 1. 局部变量与 final 变量实验2. 基本数据类型与转换实验3. 算术运算的精度问题实验4. 移位运算实验5. 运算赋值实验6. 短路逻辑运算实验7. 编程实验:输出 Unicode 特定区间的字符。8. 编程实验:分析输入的数字三. 实验结果与分析(可将程序运行结果截屏,也可分析运行结果)1. 局部变量
2、与 final 变量实验。编写以下程序,并回答问题。public class LocalVariableInitExample public static void main(String args) int a ; System.out.print(a); final int b = 100;b+;System.out.print(b); (1)程序的错误1、System.out.print(a);出错,局部变量 a 没有进行过初始化或赋值2、b+; 出错,不能对终态局部变量 b 赋值。它必须为空白,并且不使用复合赋值(2)改正方式public class LocalVariableInit
3、Example .public static void main(String args) int a=10 ; System.out.print(a); final int b = 100;System.out.print(b); 2. 基本数据类型与转换实验。编写以下程序,分析代码的输出结果,并回答问题。class Test2public static void main(String args)System.out.println(“第 1 段测试代码输出“); System.out.println(byte)255);System.out.println(short)65535);Sy
4、stem.out.println(byte)-129);System.out.println(byte)129);System.out.println(byte)128);System.out.println(“第 2 段测试代码输出“); int i = 123456789;float f = i;System.out.println(f);long j = 123456789123456789L;double d = j;System.out.println(d);System.out.println(“第 3 段测试代码输出“); System.out.println(077);Syst
5、em.out.println(0x77);System.out.println(77); 请分析并回答以下问题:(1) 分析第 1 段代码,说明在什么情况下,int 类型的数字转换为 byte 或者 short 类型,会出现符号变化,即正数变负数,负数变正数?为何输出会不同?答:在强制类型转换时,如果数值超过目标类型的取值范围,那么某些数据位会被强行截断(即数据截断) ,从而导致数据丢失,甚至符号丢失。例如:byte 的取值范围是-2 727-1,int 类型的 255 不在这个范围内,强制转换的结果是-1。(2) 分析第 2 段代码,说明整数类型向浮点型转型是否可能出现精度损失,是否需要强制
6、转换。答:整数类型向浮点型转型可能会出现精度损失,不需要强制转换,可以自动类型转换。.(3) 分析第 3 段代码,说明整数的八进制、十六机制、十进制的书写格式(即字面值格式)都是什么?答:八进制:首字母为 0 ,包括 0 到 7 之间的字符所组成的字符序列;十六进制:以 0x(或者 0X)开始,包括 0 到 9、以及 A 到 F 十六个符号组成的字符序列;十进制:由 0 到 9 十个字符组成的字符序列,一般首字符不可为 0。3. 算术运算的精度问题实验。编写以下程序,并回答问题。class Test3public static void main(String args)short a = 1
7、0;a = a + 2; byte b = 1;b = b + 1; short a = 10;byte b = 5;a = a + b; char c = a;c = c+1; (1)程序的错误1、类型不匹配:不能从 int 转换为 short ,不能从 int 转换为 byte ,不能从 int 转换为 char2、局部变量 a 、b 重复(2)改正方式class Test3 public static void main(String args)short a = 10;a = (short)(a + 2); byte b = 1;b = (byte)(b + 1); short d =
8、 10;byte e = 5;d = (short)(d + e); char c = a;.c = (char)(c+1); 4. 移位运算实验。编写以下程序,分析代码的输出结果,并回答问题。class Test4public static void main(String args)System.out.println(“第 1 段测试代码输出“);System.out.println(132);System.out.println(1L32);System.out.println(“第 2 段测试代码输出“);System.out.println(105);System.out.prin
9、tln(-105);System.out.println(“第 3 段测试代码输出“); System.out.println(11);System.out.println(-21);.请分析并回答以下问题:(1) 分析第 1 段代码,为何输出会不同?答:int 类型为 32 为,所以右移 32 位还是其本身,long 类型为 64 为,所以右移 32 位,低位被舍弃,高位补 0,最终结果为 0。(1) 分析第 2 段代码,正整数右移的最小值是什么?负整数右移的最大值是什么?答:正整数右移的最小值是 0,负整数右移的最大值是-1。(2) 分析第 3 段代码,三个语句输出为何不同?答:int 类
10、型右移 31 位,符号位就是 1。符号位 1 代表为负数, long 类型右移 31 位,只能说明扩大了 2 的 31 次方, long 类型右移 63 位,符号位就是 1,符号位 1 代表为负数(3) 分析第 4 段代码,两个语句输出为何不同?答:int 类型左移 100 位,和右移 4 位一样,100 除以 32 的余数。 long 类型左移 100 位,和右移 36 位一样,100 除以 64 的余数。(4) 分析第 5 段代码,两个移位运算是否等价?答:等价。(5) 分析第 6 段代码, q1”和“-11”有何差别?答:“-11”结果是-1 ,“-11”结果是2147483647 。5
11、. 运算赋值实验。编写以下程序,并回答问题。class Test5public static void main(String args) byte a = 10;a = a 1; / 是否出错?a = 1; / 是否出错?char c = a; c = c + 1;/ 是否出错?c += 1; / 是否出错? (1)程序的错误.类型不匹配:不能从 int 转换为 byte ,不能从 int 转换为 char。(2)改正方式public class Test5 public static void main(String args) byte a = 10;a =(byte)( a 1); /
12、 是否出错?a = 1; / 是否出错?char c = a; c =(char)( c + 1);/ 是否出错?c += 1; / 是否出错? (3)运算赋值的特点。运算赋值时无需强制转换。6. 短路逻辑运算实验。编写以下程序,并回答问题。class test6public static void main(String args) int x = 1, z = 2; System.out.println(“第 1 段测试代码输出“); if(falseelseSystem.out.println(z);z = 2; x =1;System.out.println(“第 2 段测试代码输出“
13、); if(trueelseSystem.out.println(z); x=0; z = 2; System.out.println(“第 3 段测试代码输出“); if(true|(x = (z = 1) System.out.println(z);x=0; z = 2; System.out.println(“第 4 段测试代码输出“); if(false|(x = (z =1)|true)System.out.println(z);请分析并回答以下问题:(1) 第 1 段代码的输出结果是什么,为何?答:结果是 2。没有计算(x = (z = 1),z 仍等于 2,输出 z 的值,即输出
14、 2。.(2) 第 2 段代码的输出结果是什么,为何?答:结果是 1。计算了(x = (z = 1),z 被赋值为 1,输出 z 的值,即输出 1。(3) 第 3 段代码的输出结果是什么,为何?答:结果是 2。没有计算(x = (z = 1),z 仍等于 2,输出 z 的值,即输出 2。(4) 第 4 段代码的输出结果是什么,为何?答:结果是 1。计算了(x = (z = 1),z 被赋值为 1,输出 z 的值,即输出 2。7. 编程实验:输出 Unicode 特定区间的字符。功能要求:屏幕输出所有大写英文字母、小写字母) 、某两个汉字字符之间的所有 Unicode 字符。程序:public
15、class test7 public static void main(String args) char i;for(i=a;i=z;i+)System.out.println(i);for(i=A;i=Z;i+)System.out.println(i);for(i=啊;i=阿;i+)System.out.println(i);程序运行截图是:.8. 编程实验:分析输入的数字。功能要求:输入若干个数字,依次判断这些数字是否是奇数、平方数、素数,并输出判断信息。设计要求:需要设计静态方法 isOdd(int n)来判断参数 n 是否是奇数;相似地,还需要设计静态方法 isSquareNumb
16、er(int n)和 isPrime(int n),来分别用于判断参数 n 是否是平方数、素数。程序:import java.util.*;public class test8 public static void main(String args) Scanner scanner=new Scanner(System.in);System.out.println(“请输入若干数字(以英文字符结束) :“);while(scanner.hasNextInt()int n=scanner.nextInt();if(isOdd(n)System.out.println(n+“为奇数“);elseS
17、ystem.out.println(n+“不是奇数“);if(isSquareNumber(n)System.out.println(n+“为平方数“);elseSystem.out.println(n+“不是平方数“);if(isPrime(n)System.out.println(n+“为素数“);else.System.out.println(n+“不是素数“);static boolean isOdd(int n)if(n%2=0)return false;elsereturn true;static boolean isSquareNumber(int n)int j;for(j=1;jn/2;j+)if(j*j=n)return true;return false;static boolean isPrime(int n)int j;for(j=2;jn/2;j+)if(n%j=0)return false;return true;程序运行截图是:.四. 讨论、心得(可写遇到的问题及解决方法,或者对技术的理解等)本次实验我了解到 java 与 c+有许多相同之处,如 if else 的用法,但也有很多的不同之处,如输入与输出的方法,还有不同类型的运算等。
限制150内