Java语言基础实验报告.docx
- 文档编号:4828321
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:10
- 大小:78.71KB
Java语言基础实验报告.docx
《Java语言基础实验报告.docx》由会员分享,可在线阅读,更多相关《Java语言基础实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
Java语言基础实验报告
Java语言基础实验报告
浙江大学城市学院实验报告
课程名称面向对象程序设计
实验项目名称Java语言基础实验
学生姓名专业班级学号
一.实验目的和要求
1.掌握Java语言的基本数据类型、字符串、数组
2.掌握Java语言的运算符、表达式、语句
3.能够编写Java应用程序
二.实验内容
1.局部变量与final变量实验
2.基本数据类型与转换实验
3.算术运算的精度问题实验
4.移位运算实验
5.运算赋值实验
6.短路逻辑运算实验
7.编程实验:
输出Unicode特定区间的字符。
8.编程实验:
分析输入的数字
三.实验结果与分析(可将程序运行结果截屏,也可分析运行结果)
1.局部变量与final变量实验。
编写以下程序,并回答问题。
publicclassLocalVariableInitExample{
publicstaticvoidmain(String[]args){
inta;
System.out.print(a);
finalintb=100;
b++;
System.out.print(b);
}
}
(1)程序的错误
错误1:
变量a定义之后没有赋值
错误2:
变量b为final变量,定义赋值之后不能再修改变量的值
(2)改正方式
publicclassLocalVariableInitExample{
publicstaticvoidmain(String[]args){
inta;//改成inta=10;
System.out.print(a);
finalintb=100;
b++;//将此语句删除
System.out.print(b);
}
}
2.基本数据类型与转换实验。
编写以下程序,分析代码的输出结果,并回答问题。
classTest2{
publicstaticvoidmain(String[]args){
System.out.println("第1段测试代码输出");
System.out.println((byte)255);
System.out.println((short)65535);
System.out.println((byte)-129);
System.out.println((byte)129);
System.out.println((byte)128);
System.out.println("第2段测试代码输出");
inti=123456789;
floatf=i;
(1)
(2)分析第2段代码,说明整数类型向浮点型转型是否可能出现精度损失,是否需要强制转换。
答:
可能出现精度损失,不需要强制转换
(3)分析第3段代码,说明整数的八进制、十六机制、十进制的书写格式(即字面值格式)都是什么?
答:
八进制:
首字母为0,后面为0~7所组成的
十六机制:
首字母为0x,后面为0~9和A~F所组成的
十进制:
首字母不为0,由0~9之间的数字组成
3.算术运算的精度问题实验。
编写以下程序,并回答问题。
classTest3{
publicstaticvoidmain(String[]args){
shorta=10;
a=a+2;
byteb=1;
b=b+1;
shorta=10;
byteb=5;
a=a+b;
charc='a';
c=c+1;
}
}
(1)程序的错误
错误1a+2将进行自动转化成int类型,所以不能将short类型的a+2
错误2b+1将自动转化成int类型,故不能将byte类型的b等于b+1
错误3a和b在之前已经定义过了,不能重复定义
错误4不能将short类型的a等于自动升级转化为int类型的a+b
错误5不能将char类型的c等于int类型的c+1
(2)改正方式
classTest3{
publicstaticvoidmain(String[]args){
shorta=10;
a=a+2;//改成a=(short)(a+2);
byteb=1;
b=b+1;//改成b=(byte)(b+1);
shorta=10;//改成shortd=10;
byteb=5;//改成bytee=5;
a=a+b;//改成a=(short)(d+e);
charc='a';
c=c+1;//改成c=(char)(c+1);
}
}
4.移位运算实验。
编写以下程序,分析代码的输出结果,并回答问题。
classTest4{
publicstaticvoidmain(String[]args){
System.out.println("第1段测试代码输出");
System.out.println(1>>32);
System.out.println(1L>>32);
System.out.println("第2段测试代码输出");
System.out.println(10>>5);
System.out.println(-10>>5);
System.out.println("第3段测试代码输出");
System.out.println(1<<31);
System.out.println(1L<<31);
System.out.println(1L<<63);
System.out.println("第4段测试代码输出");
System.out.println(1<<100);
System.out.println(1L<<100);
System.out.println("第5段测试代码输出");
System.out.println(7<<2);
System.out.println(7<<1<<1);
System.out.println("第6段测试代码输出");
intn=34;intq=7;
System.out.println(q< q=7; for(inti=0;i q=q<<1; System.out.println(q); System.out.println("第7段测试代码输出"); intm=2000000000; System.out.println(m<<1); System.out.println(m*2); System.out.println("第8段测试代码输出"); System.out.println(-2>>1); System.out.println(-2>>>1); } } 请分析并回答以下问题: (4)分析第1段代码,为何输出会不同? 答: System.out.println(1>>32);int类型的1向右移位 System.out.println(1L>>32);long类型的1向右移位 (1)分析第2段代码,正整数右移的最小值是什么? 负整数右移的最大值是什么? 答: 正整数右移最小值为0 负数右移最大值为-1 (5)分析第3段代码,三个语句输出为何不同? 答: System.out.println(1<<31);-2147483648因为1是int类型所以移动位数是31对32求余,也就是向左移动32位,将1从第0位移到了第31位符号位,而所有低位都补充为0 System.out.println(1L<<31);2147483648因为是long类型所以移动位数是31对64求余,也就是向左移动31位 System.out.println(1L<<63);-9223372036854775808因为long类型向左移动63位,将1从第0位移到了第63位符号位,而所有低位都补充为0 (6)分析第4段代码,两个语句输出为何不同? 答: System.out.println(1<<100);16就是int类型的1向左移动100对32取余个位数,就是左移4位 System.out.println(1L<<100);68719476736就是long类型的1向左移动100对63取余个位数,就是左移37位 (7)分析第5段代码,两个移位运算是否等价? 答: 等价 (8)分析第6段代码,q< 什么条件下相同? 答: 不相同,只有当符号位没有改变的时候才会相同 (9)分析第7段代码,左移1位与乘2是否等价? 左移1位是否一定值翻倍? 答: 等价,不一定,如果是数为-1左移一位之后将变成0 (10)分析第8段代码,“-1>>1”和“-1>>>1”有何差别? 答: System.out.println(-2>>1);-1有符号右移1位,因为-2是负数,所以在高位补充1 System.out.println(-2>>>1);2147483647无符号右移1位,高位统一补充0 5.运算赋值实验。 编写以下程序,并回答问题。 classTest5{ publicstaticvoidmain(String[]args){ bytea=10; a=a>>1;//是否出错? a>>=1;//是否出错? charc='a'; c=c+1;//是否出错? c+=1;//是否出错? } } (1)程序的错误 错误1: a为byte类型,在移位运算过程中会自动转化成int类型 错误2: c为char类型,c+1将自动转化成int类型 (2)改正方式 classTest5{ publicstaticvoidmain(String[]args){ bytea=10; a=a>>1;//改成a=(byte)(a>>1) a>>=1; charc='a'; c=c+1;//改成c=(char)(c+1); c+=1; } } (3)运算赋值的特点。 运算赋值的时候无需进行强制转换,因为其自动进行强制类型转换 普通赋值的时候要进行强制类型转换 6.短路逻辑运算实验。 编写以下程序,并回答问题。 classtest6{ publicstaticvoidmain(String[]args){ intx=1,z=2; System.out.println("第1段测试代码输出"); if(false&&(x==(z=1))) System.out.println(x); else System.out.println(z); z=2;x=1; System.out.println("第2段测试代码输出"); if(true&&(x==(z=1))&&false) System.out.println(x); else System.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); } } 请分析并回答以下问题: (11)第1段代码的输出结果是什么,为何? 答: 2因为if(false&&(x==(z=1)))时因为第一个是false就没有计算(x==(z=1)),z仍然为2 (12)第2段代码的输出结果是什么,为何? 答: 1因为if(true&&(x==(z=1))&&false)时第一个是true故计算了(x==(z=1)),z被赋值为1 (13)第3段代码的输出结果是什么,为何? 答: 2因为if(true||(x==(z=1)))没有计算x==(z=1),z仍然为2 (14)第4段代码的输出结果是什么,为何? 答: 1因为if(false||(x==(z=1))||true)计算了x==(z=1),z被赋值为1 7.编程实验: 输出Unicode特定区间的字符。 功能要求: 屏幕输出所有大写英文字母、小写字母)、某两个汉字字符之间的所有Unicode字符。 程序运行截图是: 8.编程实验: 分析输入的数字。 功能要求: 输入若干个数字,依次判断这些数字是否是奇数、平方数、素数,并输出判断信息。 设计要求: 需要设计静态方法isOdd(intn)来判断参数n是否是奇数;相似地,还需要设计静态方法isSquareNumber(intn)和isPrime(intn),来分别用于判断参数n是否是平方数、素数。 程序运行截图是: 四.讨论、心得(可写遇到的问题及解决方法,或者对技术的理解等) 移位运算以及在赋值运算的时强制类型转化的一些细节以及规则性问题得到了解决
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言 基础 实验 报告