[计算机软件及应用]JAVA快速入门练习.docx

上传人:scccc 文档编号:13516245 上传时间:2022-01-13 格式:DOCX 页数:30 大小:75.59KB
返回 下载 相关 举报
[计算机软件及应用]JAVA快速入门练习.docx_第1页
第1页 / 共30页
[计算机软件及应用]JAVA快速入门练习.docx_第2页
第2页 / 共30页
[计算机软件及应用]JAVA快速入门练习.docx_第3页
第3页 / 共30页
[计算机软件及应用]JAVA快速入门练习.docx_第4页
第4页 / 共30页
[计算机软件及应用]JAVA快速入门练习.docx_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《[计算机软件及应用]JAVA快速入门练习.docx》由会员分享,可在线阅读,更多相关《[计算机软件及应用]JAVA快速入门练习.docx(30页珍藏版)》请在三一文库上搜索。

1、.第3章 实验 JAVA基本语法23.1实验目标(1) 算术运算符、算术表达式(2) 布尔及关系算符和表达式(3) if/else控制结构(4) 练习使用对话框3.2实验说明在上一章的实验中,你所看到的程序都是顺序执行的。本章实验教程将介绍如何使用JAVA选择控制语句,使程序能基于条件进行判断,从而选择执行相应的逻辑分支。以下的实验包括4种类型, 每种类型都用括号里面的字母表示:D - 例程(demo example), 表示这是一个例子, 要求练习者阅读指南和代码; I - 交互式练习(interactive exercise), 练习者完成实验指定的简单任务,如修改部分代码, 观察程序运行

2、时的变化等; W - 热身练习(warm-up exercise), 练习者的编程工作量逐渐加大。P - 完整编程 (full-fledged programming ) ,要求练习者根据要求,完成完整的JAVA程序。3.3实验准备从本实验教程光盘中拷贝Lab03文件目录到本地磁盘, 如D: 盘。Lab03文件目录中将包含本次实验所需的所有资料。 Lab03的相关资料也可以从本实验教程的网站下载:http:/javaLab/lab03.zip3.4实验任务实验3.4.1: (D)对数据类型char的介绍到目前为止我们已经介绍了表示数字的数据类型(integers和floating-point)

3、。文本的数据类型包括char和String。char是一种Java基本数据类型,用来表示文本字符; 字符串是类String的对象。类String包含在Java类库的java.lang包里面,java.lang包是唯一一个不用关键字import导入就能够自动包含进任何一个java程序的库包。基本上,计算机只处理数字。它们指定一个数字来储存字母或其他字符。字符在计算机存储器里是以一串二进制位(binary digits, 0或1)存储的。ASCII码是目前计算机最通用的编码标准,有7位码和8位码两种形式。在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位)。ASCII码将字符作为数字

4、来表示,比如大写字母M的ASCII码是77。ASCII字符不仅包括字母、数字和标点符号,同样包括控制字符如退格、制表符等。ASCII码中数值在0到31的为控制字符。 ASCII字符集中,大写字母和小写字母的顺序是按字母表排列的,数字也是正序的。注意,数字的ASCII码值和它本身的值是不同的。例如数字0的ASCII码值是48而不是0。Java语言采用16位双字节字符编码标准(Unicode)。对于英文来说,ASCII码足以代表所有字符;而对于中文等其他文字而言,要用两个字节来表示一个文字。Java用16个二进制位来存储所有的字符,Unicode可以表示包括中文在内的多种文字。前128个Unico

5、de字符与ASCII码字符集相同,只是前面多了一个全是0的字节。这些字符的值从u0000到uffff。转义符u表示在它之后的是十六进制的Unicode值字符表示法。每一个16进制位对应于4个二进制位,因此4个十六进制位可以表示16个二进制位。实验3.4.2: (I)逆序显示字母的Applet小程序1. 通过HTML文件ViewReverseAlphabet1.html运行小程序ReverseAlphabet1.java ,程序的显示如下图:图3.1 用小程序查看ReverseAlphabet1ReverseAlphabetWhile1.java源代码见程序清单3-1,paint()方法中产生字

6、母逆序的代码如下: public void paint(Graphics g) String text = ;char letter = Z;while ( letter = A ) text = text + letter;letter = (char) (letter - 1); / whileg.drawString(text, 50, 40); / method paint(Graphics)String变量text被初始化成空字符串。每次执行while循环块,都将一个字母(字符变量letter的值)附加在字符串text后。循环执行完成后,字符串变量text的值由drawstring显

7、示出来。 代码中的A、Z为字符常量;变量letter是一个字符变量,字符变量是存放字符常量的变量。字符类型的字母用单引号 标明,而string类型的字符串则用 隔开。例如,A 与 A 是不同的。A 是字符A,而 A 是字符串A。A 是字符(char)类型,而A是字符串(String)类。存储器中存储 A 所用的空间比存储 A 要多一些。 变量letter的初始值为Z,执行第一次while循环,变量letter的值被代替为字符Y,执行第二次while循环,变量letter的值被代替为字符X下面的语句中:letter=(char)(letter-1);字符减1意味着从字符的Unicode值中减1,

8、Z的Unicode值为90,Z-1的Unicode值为89。这里的(char) 称为强制类型转换符,把数字89强制转换成相应的字符Y。程序清单3-1:ReverseAlphabet1.java/ ReverseAlphabet1.java/ Simple applet which displays/ the alphabet backwards in capital letters.import java.applet.Applet;import java.awt.Graphics;public class ReverseAlphabet1 extends Applet public void

9、 paint(Graphics g) String text = ; char letter = Z; while ( letter = A ) text = text + letter; letter = (char) (letter - 1); / while g.drawString(text, 50, 40); / method paint(Graphics) / class ReverseAlphabet12. 将ReverseAlphabet1.java另存为MyReverseAlphabet.java。在MyReverseAlphabet.java中,将代码改成: letter

10、= (letter - 1);编译程序,你将得到什么错误信息?MyReverseAlphabet.java:16: 可能损失精度找到: int需要: char letter = (letter 1); 1 错误Java语言的类型转换有隐式转换(或称自动类型转换)和显式转换(或强制类型转换)两种。“隐式转换”不需要源代码中的任何特殊语法。在表达式(letter-1)中,letter自动转化为int型从而减1,而不必用强制类型转换符(int)来强制转换。“显式转换”使用类型转换符,Java类型转换符的格式:(类型)。表达式(char)(letter-1)将int类型用(char)强制地转换为一个c

11、har型。(char)在int向char转化时必需,而(int)在char型向int型转化时则不需要。这是因为一个整型(int)的数在存贮器中占32位,而Java中的一个字符(char)只占16位,所以整数向字符转化时可能会丢失数据,Java编译器必须在得到程序员明确告知的前提下才能进行这样的处理,所以需要显式地给出强制类型转化。另一方面,从字符转化为整数则没有数据丢失之虞,Java虚拟机在位表达式的前面加上16个额外的0补足成int型的32位,不需要显式给出强制转换。 3. 改正MyReverseAlphabet.java中的错误。观察while循环条件:while ( letter = A

12、 )比较两个字符,比如说一个字符大于或等于另一个字符,实际上是比较它们的Unicode值。 实验3.4.3: (W)练习使用带char变量的while循环写一个Applet小程序AlphabetWhile1.java, 按字母表顺序打印出26个小写字母。 创建一个HTML文件ViewAlphabetWhile1.html来运行程序。实验3.4.4: (W)练习使用输入对话框编译运行InputDialogDemo.java ,使用三种方式测试:(1)输入一些文本内容再点击ok(2)不输入任何内容直接点击ok(3)点击cancel。见代码清单3-2。 程序清单3-2:InputDialogDemo

13、.java/ InputDialogDemo.javaimport javax.swing.JOptionPane;public class InputDialogDemo public static void main(String args) String text = JOptionPane.showInputDialog(Type something.); if ( text = null ) / i.e. no String was returned JOptionPane.showMessageDialog( null, You clicked Cancel.); else if

14、( text.equals() ) / an empty String, containing no characters JOptionPane.showMessageDialog( null, You clicked OK without typing anything.); else JOptionPane.showMessageDialog( null, You typed: + text); System.exit(0); / method main / class InputDialogDemo 如果用户点击cancel,则String变量text接收到值null。那意味着用户没有

15、输入任何的字符串,我们称之为“无串”。如果用户没有输入任何字符串,直接点击ok,String变量text接收到中的内容,是“空串”。 “空串”和“无串”有何不同呢?这有点象空杯子和没有杯子的区别。一个String包含一系列字符和其它信息,内存中为String分配有一定空间。如果String值为null,表示根本就没有分配任何存储空间;如果String变量指向空串,表示它确实是一个String型,只是分配的存储区域内不包含任何的字符。 在测试空串时,使用equals是必要的,使用下面的语句: else if ( text.equals() )而不是: else if ( text = )引用St

16、ring时,等于符号(=)会判断符号两侧的String引用是否引用同一个String 对象,即是否引用同一存储位置。但字符串变量text引用的String 对象和 在存储器中的位置不同。因此,即使text为空,条件: text = 也为false。另一方面,text指向空Sring时,条件:text.equals()则为真,因为equals比较两个字符串对象是否含有相同的一串字符。类似地,测试text非空,相应的条件为: !text.equals()而不是: text != 符号 ! 表示“非“。实验3.4.5: (P)计算对话框输入数字的平均数1. 写一个Java应用程序Average4.j

17、ava 用来计算通过对话框输入的一系列整数的浮点平均数,用cancel作为结束输入的标识。 回顾一下在DialogInputDemo.java中,如何检测用户点击了cancel。结果显示在一个消息对话框中,结果使用小数点后两位。如果用户没有输入数字就点击Cancel,消息对话框会弹出一个用户友好的错误消息。 仔细考虑程序中语句的顺序, 哪个语句应该在循环开始时执行、循环结束时执行,或者循环之前执行。程序的特别要求:将输入字符串转换为整数,不要使用方法Integer.ParseInt()。在敲入程序代码前,先在草稿纸上设计好程序的算法。 注意使用准确的变量名和消息表示方法。2. 将Average

18、4.java另存为 Average5.java。 Average5.java程序与Average4.java程序功能类似,要求用户没有输入任何的数字点击ok的情况下不显示错误消息,空输入将被忽略。注意在while循环中,可以使用嵌套if或while循环控制语句,为了便于阅读,每一层嵌套都应有一个缩排层次。 实验3.4.6: (D)列的右对齐 编译和运行程序 NeatColumns1.java,见程序清单3-3。程序清单3-3:InputDialogDemo.java/ NeatColumns1.java/ Displays table of powers of two at the comma

19、nd line/ with right-justified column output.public class NeatColumns1 public static void main(String args) System.out.println(Powers of two); System.out.println(-n); System.out.println(Exponent Power); System.out.println(- -n); int exponent = 0; int power = 1; while ( power 100000 ) / Pad with leadi

20、ng spaces to right-justify: String exponentText = Integer.toString(exponent); while ( exponentText.length() 2 ) exponentText = + exponentText; String powerText = Integer.toString(power); while ( powerText.length() 12 ) powerText = + powerText; / Print row of table: System.out.println( + exponentText

21、 + + powerText); / Loop increments: exponent = exponent + 1; power = power * 2; / while / method main / class NeatColumns1 此程序和SloppyColumns.java程序类似,运行后的输出列更加简洁。输出数据的排列方式为右对齐。此程序的右对齐是通过whlie循环留出足够的位置来实现的: String powerText = Integer.toString(power); while ( powerText.length() 0 undefined, if n Java

22、Table 5数 数的阶乘- -0 11 12 23 64 245 120实验3.4.8: (D)字体介绍 编译运行程序FontDemo.java和FontSizeDemo.java. 编写ViewFontDemo.html和ViewFontSizeDemo.html运行这两个Applet小程序。用浏览器或小程序窗口皆可。 用记事本打开文件FontDemo.java和FontSizeDemo.java,观察文本中的字体控制是如何实现的。这里只需了解一个大概的字体概念,字体转换工作的具体细节可以阅读更多的JAVA教材。 观察到以上程序中字体对象(Font)有三个参数:(1)字体名称(如“Seri

23、f”, “SansSerif”, “Monospaced”等)(2) 字体类型(如“PLAIN”, “BOLD”, “ITALIC”等)(3) 字体大小大多数个人电脑中的字体是 “SansSerif”,PLAIN, 12像素。 程序清单3-4:FontDemo.javaimport java.applet.Applet;import java.awt.Graphics;import java.awt.Font;public class FontDemo extends Applet public void paint( Graphics g ) Font font1, font2, font3

24、, font4, font5, font6; font1 = getFont(); g.drawString( The default font is + font1.getSize() + -point + font1.getName(), 50, 50 ); font2 = new Font( font1.getName(), Font.BOLD, font1.getSize() ); g.setFont(font2); g.drawString( This font has the same name and size as the, 50, 85); g.drawString( def

25、ault font, but its style is BOLD., 50, 100); font3 = new Font( font1.getName(), Font.ITALIC, font1.getSize() ); g.setFont(font3); g.drawString( This font has the same name and size as the, 50, 135); g.drawString( default font, but its style is ITALIC., 50, 150); font4 = new Font( Serif, font1.getSty

26、le(), font1.getSize() ); g.setFont(font4); g.drawString( This font is + font4.getName() + with the same , 50, 185); g.drawString( size and style as the default font., 50, 200); font5 = new Font( Monospaced, font1.getStyle(), font1.getSize() ); g.setFont(font5); g.drawString( This font is + font5.get

27、Name() + with the same , 50, 235); g.drawString( size and style as the default font., 50, 250); font6 = new Font( font1.getName(), font1.getStyle(), 2 * font1.getSize() ); g.setFont(font6); g.drawString( This font is + font6.getSize() + -point, 50, 300); g.drawString( with the same name and, 50, 330

28、); g.drawString( style as the default font., 50, 360); / method paint(Graphics) / class FontDemo程序清单3-5:WhileCounter.javaimport java.applet.Applet;import java.awt.Graphics;import java.awt.Font;public class FontSizeDemo extends Applet public void paint( Graphics g ) Font font1, font2, font3; int coun

29、ter = 1; / initialization int xPos = 25; font1 = getFont(); / default font while ( counter = 5 ) / repetition condition font2 = new Font( font1.getName(), font1.getStyle(), font1.getSize() * counter); g.setFont(font2); g.drawString( Integer.toString( font2.getSize() ), xPos, 100 ); +counter; / incre

30、ment xPos += 25 * counter; / while counter font3 = new Font( font1.getName(), Font.BOLD, font1.getSize(); g.setFont(font3); g.drawString( Each number represents its displayed font size., 25, 150 ); / method paint(Graphics) / class FontSizeDemo实验3.4.9: (P)显示加号的阵列写一个Java小程序 AsterisksApplet.java 显示如下加号

31、的阵列: + + + + + + + + + + + + + + + + + + + + + + + + + 将语句: g.drawString(+, x, y);嵌套到恰当的循环结构中。x和y是int型变量或者int型的表达式。由于drawString处理的是一个字符串而非字符,所以我们用 + 而不是 + 。我们可以通过程序更改字符的字体。paint方法前面添加如下语句改变原有字体:Font f = new Font(Serif, Font.PLAIN, 24); g.setFont(f);修改后的字体大小为24像素,字体类型为Serif。记住在使用Font类前,导入Java包: impor

32、t java.awt.Font;提示:思考奇数或偶数的定义。编写ViewPlusApplet.html文件来运行这个小程序。实验3.4.10: (P)自增和自减运算符1. 观察 WhileCounter.java中的如下两行: yPos += 15; counter+; / increment这些行是如下行的替代行: yPos = yPos + 15; counter = counter + 1; /increment这里的“+”称为自增运算符。counter+;等价于counter = counter + 1;类似的,“-” 称为自减运算符。自增和自减运算符适用于所有的数字类型。它们为给定变

33、量的加1或减1操作提供捷径。但是,使用这两个运算符有着细微却不容忽视的副作用。这个影响是由于这两个运算符的所谓“前置”和“后置”。如果自增或自减运算符被放置在变量名的前面,则操作在表达式赋值之前进行。相反,如果运算符直接放在变量名的后面,则操作在表达式赋值之后进行。比较下面的代码片断:int x1 = 0;int y1 = 5 + x1+;System.out.println( x1 = + x1 + y1 = + y1);int x2 = 0;int y2 = 5 + +x2;System.out.println( x2 = + x2 + y2 = + y2);以上例子中,x1和x2的最终值

34、都是1。但是,可以看到y1的值是6而y2是7。这是因为x1的自增在表达式赋值后才得以实现,而x2的值在表达式赋值前就自增了。程序清单3-6:WhileCounter.javaimport java.awt.Graphics;import java.awt.Font;import java.applet.Applet;public class WhileCounter extends Applet public void paint( Graphics g ) Font font1, font2; int counter = 1; / initialization int yPos = 25;

35、while ( counter = 10 ) / repetition condition g.drawString( Integer.toString( counter ), 25, yPos ); yPos += 15; counter+; / increment / while counter font1 = getFont(); font2 = new Font( font1.getName(), Font.BOLD + Font.ITALIC, font1.getSize(); g.setFont(font2); g.drawString(while, 25, 200); g.set

36、Font(font1); g.drawString(loop demo, 25, 215); / method paint(Graphics) / class WhileCounter编写一个Applet程序 AlphabetWhile2.java。按顺序打印26个小写字母,练习使用 + 和 += 运算符。程序中避免使用不必要的强制类型转换。程序的编写可参考ReverseAlphabet1.java和AlphabetWhile1.java程序。编写HTML文件ViewAlphabetWhile2.html来运行此Applet。实验3.4.11: (D)布尔变量编译 CheckNonASCII.

37、java,按照提示进行输入。 它检测你的输入中是否有非ASCII 字符。分别测试有和没有非ASCII 字符的情况。 然后检查源代码。该程序使用了一个boolean类型的变量: boolean nonAsciiFound = false;该 boolean 变量 nonAaciiFound 用在一个循环中以标示目前是否发现了一个非ASCII字符: for ( int i = 0; i 127 ) nonAsciiFound = true; / for i注意for循环条件中nonAaciiFound之前的感叹号(!)。在这种情况下, 感叹号是“非”操作符,取反紧接它之后的布尔表达式。 因此当no

38、nAsciiFound为false时,!nonAsciiFound 为 true, nonAsciiFound 为 true 时,!nonAsciiFound为 false 。nonAaciiFound 初始值为 false。 String中的每个字符都要测试,当一个控制字符出现时, nonAaciiFound 为true 。这个技术有时称为 无罪推定。 程序清单3-7:CheckNonASCII.javaimport java.io.*;public class CheckNonASCII public static void main(String argv) throws IOExcep

39、tion / code needed for keyboard input BufferedReader br = new BufferedReader( new InputStreamReader(System.in); System.out.print(Type something. Anything:); String text = br.readLine(); System.out.println(); System.out.println(You typed: + text); boolean nonAsciiFound = false; for ( int i = 0; i 127 )

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1