浙江大学城市学院实验报告
课程名称 ______________ 面向对象程序设讣
实验工程名称 ________________ Java语言基础实验__________________________________ 学生姓名专业班级学号
实验目的和要求
1.掌握Java语言的基本数据类型、字符串、数组
2.掌握Java语言的运算符、表达式、语句
3.能够编写Java应用程序
二. 实验内容
1.局部变量与final变量实验
2.基本数据类型与转换实验
3.算术运算的精度问题实验
4.移位运算实验
5.运算赋值实验
6.短路逻辑运算实验
7.编程实验:输出Unicode特泄区间的字符。
&编程实验:分析输入的数字
三. 实验结果与分析(可将程序运行结果截屏,也可分析运行结果)
1.局部变量与final变量实验。编写以下程序,并回答问题。
public class LocalVariablcInitExample {
public static void main(String[] args) {
int a o
System.out.print(a)o
final int b = 100。
b++o
System.out.print(b)c
}
}
(1)程序的错误
1、S ystem.out.print(a)o出错,局部变量a没有进行过初始化或赋值
2、b++。岀错,不能对终态局部变量b赋值。它必须为空白,并且不使用复合赋值
(2)改正方式
public class LocalVariablelnitExample {
public static void main(String[] args) {
int a=10 o
System.out.print(a)o
final int b= 100°
Systeni.out.print(b)o
}
}
2.基本数据类型与转换实验。编写以下程序,分析代码的输出结果,并回答问题。class
Test2{
public static void main(String[] args){
System.out.println(M第1段测试代码输出”)。
System.out.println((byle)255)o
System.out.println((short)65535)0
System.out.println((byte)-129)。
System.out.println((byte)129)o
System.out.println((byte) 128)。
System.out.printing第2段测试代码输出”)。
int i= 123456789 c
float f =仁
System.out.println(f)0
longj=123456789123456789L, double d = j。
System.out.println(d)o
System.out.println(H第3段测试代码输出
System.out.println(077) <>
System.out.println(0x77)o
System.out.println(77)o
}
}
请分析并回答以下问题:
(1)分析第1段代码,说明在什么情况下,int类型的数字转换为byte或者short类型,会岀
现符号变化,即正数变负数,负数变正数?为何输出会不同?
答:在强制类型转换时,如果数值超过目标类型的取值范用,那么某些数据位会被强行截断(即数据截断),从而导致数据丢失,甚至符号丢失。
例如:byte的取值范围是-27~2U, int类型的255不在这个范围内,强制转换的结果是-lo
(2)分析第2段代码,说明整数类型向浮点型转型是否可能岀现精度损失,是否需要强制
转换。
答:整数类型向浮点型转型可能会出现精度损失?不需要强制转换,可以自动类型转换。
(3)分析第3段代码,说明整数的八进制、十六机制、十进制的书写格式(即字而值格式)
都是什么?
答:八进制:首字母为0 ,包括0到7之间的字符所组成的字符序列;
十六进制:以0x(或者0X)开始,包括0到9、以及A到F十六个符号组成的字符序列;
十进制:由0到9十个字符组成的字符序列,一般首字符不可为0。
3.算术运算的精度问题实验。编写以下程序,并回答问题。
class Test3{
public static void main(String[] args){
short a = 10a
a = a + 2o
byte b= lo
b = b + 1 o
short a = 10=
byte b = 5o
a = a + bo
char c = 'a 寫
C = C+lo
}
}
(1)程序的错误
1、类型不匹配:不能从int转换为short ,不能从int转换为byte,不能从int转换为char
2、局部变虽a、b重复
(2)改正方式
class Test3 {
public static void main(String[] args){
short a = 10o
a = (short)(a + 2)o
byte b = 1 o
b = (byte)(b + 1)。
short d = 10o
byte e = 5o
d = (short)(d + e)o
c = (char)(c+l)o
}
}
4.移位运算实验。编写以下程序,分析代码的输出结果,并回答问题。class Test4{
public static void main(String[) args){
System, out. printing第1段测试代码输出”)。
System.out.println( 1 ?32)o
System.out.println(l L?32)o
System.out.printlnC第2段测试代码输出”)。
System.out.println( 10?5)o
System.out.println(-10?5)。
System.out.printing第3段测试代码输出”)a
System.out.println( 1 ?31 )。
System.out.println( 1 L?31)。
System.out.println( 1 Lvv63)。
System.out.printing第4段测试代码输出”)。
System.out.println( 1?100) <>
System.out.println(l L? 100)。
System.out.printlnC第5段测试代码输出”)。
System.out.println(7?2)o
System.out.println(7? 1 vv 1) ?
System.out.printing第6段测试代码输出”)a
int n = 34o int q=7o
System.out.println(q?n)o
q= 7。
for(int i = 0o ivn。i++)
q = q?U
System.out.println(q)o
System.out.printing第7段测试代码输出”)。
int m = 2000000000a
Systcm.out.println(m? 1 )o
System.out.println(m*2)o
System.out.printing第8段测试代码输出”)a
System.out.println(-2? 1)。
System.out.println(-2>?l)o
}
请分析并回答以下问题:
(1)分析第1段代码,为何输出会不同?
答:im类型为32为,所以右移32位还是其本身,long类型为64为,所以右移32位, 低位被舍弃,髙位补0,最终结果为0。
(1)分析第2段代码,正整数右移的最小值是什么?负整数右移的最大值是什么?答:正
整数右移的最小值是0,负整数右移的最大值是-1。
(2)分析第3段代码,三个语句输岀为何不同?
答:int类型右移31位,符号位就是K符号位1代表为负数,long类型右移31位,只能说明扩大了
2的31次方,long类型右移63位,符号位就是1,符号位1代表为负数
(3)分析第4段代码,两个语句输出为何不同?
答:int类型左移100位,和右移4位一样,100除以32的余数。long类型左移100位,和右移36位一样,100除以64的余数。
(4)分析第5段代码,两个移位运算是否等价?
答:等价。
⑸ 分析第6段代码,q?n与将q不断左移1位(共移动n位)是否相同?什么条件下相同?
答:不相同,在n=2的情况下相同。
(6)分析第7段代码,左移1位与乘2是否等价?左移1位是否一定值翻倍?
答:等价。如果不是移到最髙位,符号位上,则不一定翻倍。
(7)分析第8段代码,和有何差别?
答:结果是J, 结果是2147483647。
5.运算赋值实验。编写以下程序,并回答问题。
class Test5{
public static void main(String[] args) {
byte a = 10。
a = a ? 1 o //是否岀错?
a ?= 1 o 〃是否出错?
char c = 'a 寫
C = C+lo //是否出错?
C+= lo //是否出错?
}
}
(1)程序的错误
类型不匹配:不能从int转换为byte ,不能从int转换为char。
(2)改正方式
piiblicclass Test5 {
publicstatievoid main(String[] args) { byte a = 10。
a =(byte) ( a ? l)o// 是否出错?
a ?= lo //是否出错?
char c = 1a'o
c =(char) ( c + l)o // 是否出错?
C += 1= //是否出错?
}
(3)运算赋值的特点。
运算赋值时无需强制转换。
6.短路逻辑运算实验。编写以下程序,并回答问题。
class test6{
public static void inain(String[] args) {
int x = 1, z = 2o
System, out. printing第1段测试代码输出”)。
if(false&&(x = (z= 1)))
System.out.println(x)o
else
System.out.println(z)o
z = 2? X =1 O
System.out.printing第2段测试代码输出”)。
if(true&&(x == (z = 1))&&false)
System.out.println(x)o
else
System.out.println(z)o
x=0o z = 2o
System.out.printlnC1第3段测试代码输出”)。if(truell(x == (z= 1)))
System.out.println(z)o
X=0o Z = 2e
System.out.printing第4段测试代码输出”)。
if(falsell(x == (z=l))lltrue)
System.out.println(z)o
}
}
请分析并回答以下问题:
(1)第1段代码的输出结果是什么,为何?
答:结果是2。没有计算(x = (z=l)), z仍等于2,输岀z的值,即输出2。
(2)第2段代码的输出结果是什么,为何?
答:结果是1。计算了(x = (z=l)), z被赋值为1,输岀z的值,即输出1。
(3)第3段代码的输出结果是什么,为何?
答:结果是2。没有计算(x==(z=l)), z仍等于2,输出z的值,即输出2。
(4)第4段代码的输出结果是什么,为何?
答:结果是1。计算了(x = (z=l)), z被赋值为1,输岀z的值,即输岀2。
7.编程实验:输出Unicode特定区间的字符。功能要求:屏幕输出所有大写英文字母、小写字母)、某两个汉字字符之间的所有Unicode字符。
程序:
publicclass test7 {
publicstatievoid main(String[] args) {
char i。
for(i=1a'o i<=1z1o i++)
System?out.printIn(i)o
for(i=y i<=,Z,o i++)
System?out; .println (i) o
for (i=f啊iv二邛可?i++)
System?out;.printIn (i)。
}
}
程序运行截图是:
&编程实验:分析输入的数字。功能要求:输入若干个数字,依次判断这些数字是否是奇数、平方数、素数,并输出判断信息。设计要求:需要设计静态方法isOdd(int n)来判断参数n是否是奇数:相似地,还需要设汁静态方法isSquareNumber(int n)和isPrime(int n), 来分别用于判断参数n 是否是平方数、素数。
程序:
import j ava ? util? *。publicclass test8 { publicstaticvoid main(String[] args) { Scanner scanner=new Scanner(System?in)。
System, out .println ("请输入若干数字(以英文字符结束):")。
while(scanner ? hasNextlnt()) {
int n=scanner ? nEKtlnt()o if{IsOdd(n))
System?out;? printin (n+‘‘为奇数'')。
else
System ?out;?printin (n+“ 彳、迄奇数")o
if (isSquareNuinber (n))
Sys out;, printin (“+"为平方数")。
else
Syst?m?out;.printin (n+"彳:是计数")。
if (IsPrlrae (n))
System ?out;? printin ("+''为素数")。
else
System?out; ?printin (n+"彳、是势;数")。
}
staticboolean isOdd(int n){
if (n%2==0)
returnfalse o
else
returntrue。
}
statiuboolean isSquareNumber(int n){ int j o for(j =1o j if (j*j==n) returntrue o } returnfalse。 } staticboolean isPrime(int n) { int j o for(j =2o j if(n%j==0) returnfalse o } :returntrue。 } } 程序运行截图是: 四. 讨论、心得(可写遇到的问题及解决方法,或者对技术的理解等) 本次实验我了解到java 与C++有许多相同之处,如if else 的用法,但也有很多的不同之 处,如输入与输出的方法,还有不同类型的运算等。 【iwn law 怦册 J 丄心“I ?引? B Q ? 4. 必|矍z 护 Snart Jwl 19:39 Stobk 二 珞? O ? Q ?兰曲& ? a $