当前位置:文档之家› Java语言基础实验

Java语言基础实验

Java语言基础实验
Java语言基础实验

浙江大学城市学院实验报告

课程名称 ______________ 面向对象程序设讣

实验工程名称 ________________ 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 $

相关主题
文本预览
相关文档 最新文档