




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 实验 JAVA基本语法12.1实验目标(1) 算术运算符、算术表达式(2) 布尔及关系算符和表达式(3) if/else控制结构(4) while循环语句(5) 练习使用对话框2.2实验说明 在上一章的实验中所看到的程序都是顺序执行的。本章实验教程将介绍如何使用JAVA选择控制语句,使程序能基于条件进行判断,从而选择执行相应的逻辑分支。以下的实验包括4种类型, 每种类型都用括号里面的字母表示:D - 例程, 表示这是一个例子, 要求练习者阅读指南和代码; I - 交互式练习, 练习者完成实验指定的简单任务,如修改部分代码, 观察程序运行时的变化等; W - 热身练习, 练习者的编程工作量逐渐加大。P - 完整编程,要求练习者根据要求,完成完整的JAVA程序。2.3实验准备从本实验教程光盘中拷贝Lab02文件目录到本地磁盘, 如C: 盘。Lab02 文件目录中将包含本次实验所需的所有资料。 Lab02的相关资料也可以从本实验教程的网站下载。2.4实验任务实验2.4.1: (D)运行四个Java程序在已经安装JAVA SDK 5.0 的电脑上编译、运行4个JAVA程序IntDiv.java、 FloDiv.java、DouDiv.java 和 MinSec.java,观察程序的运行结果。在这四个程序中,运用了另外一种键盘读入的形式JOptionPane对话框。这种图形界面对用户来讲比命令行的数据输入方式更友好。用记事本或EditPlus 打开这几个程序,比较程序源代码。 IntDiv.java、 FloDiv.java、 DouDiv.java 和MinSec.java 都是按照这样的步骤执行的:(1) 提示用户输入数字。 这些数字是以字符串的形式被读取,而后又被转换成数字; (2) 适当的运算;(3) 输出显示。 MinSec.java (见程序清单2-1)包括以下的语句:int totalSeconds = Integer.parseInt( JOptionPane.showInputDialog( Enter total seconds (integer) ); 这个语句可以看作是以下两个语句的缩写:String totalSecondsText = JOptionPane.showInputDialog( Enter total seconds (integer) ); int totalSeconds = Integer.parseInt(totalSecondsText);程序清单2-1:MinSec.java / MinSec.java/ 将总秒数转换为分钟和剩余秒数 import javax.swing.JOptionPane; public class MinSec public static void main( String args ) JOptionPane.showMessageDialog( null, 将输入总秒数 n + 转换为相应的 n + 分钟数和秒数 。 ); / 读取总秒数 : int totalSeconds = Integer.parseInt( JOptionPane.showInputDialog( 输入总秒数 (整数) ); / 计算分钟和秒数 int minutes = totalSeconds / 60; int seconds = totalSeconds % 60; / 显示结果 JOptionPane.showMessageDialog( null, totalSeconds + 秒等于 + minutes + 分钟加 + seconds + 秒。 ); System.exit( 0 ); / 结束程序 / method main / class MinSec 程序清单2-2:IntDiv.java / IntDiv.javaimport javax.swing.JOptionPane; public class IntDiv public static void main( String args ) / 从用户处得到一个字符串型的数字 String dividendText = JOptionPane.showInputDialog( 输入被除数 (整数) ); / 再从用户处取得一个字符串型的数字 String divisorText = JOptionPane.showInputDialog( 输入除数 (整数) ); / 将类型String转换为类型int int dividend = Integer.parseInt( dividendText ); int divisor = Integer.parseInt( divisorText ); / 进行除运算 int quotient = dividend / divisor; int remainder = dividend % divisor; / 显示结果 JOptionPane.showMessageDialog( null, dividend + 除以 + divisor + 等于n + quotient + 再加余数 + remainder + ., 结果, JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); / 结束程序 / method main / class IntDiv 程序清单2-3:FloDiv.java / FloDiv.java/ 演示浮点型的浮点数除法 import javax.swing.JOptionPane; public class FloDiv public static void main( String args ) /从用户处得到一个字符串型的数字 String dividendText = JOptionPane.showInputDialog( 键入被除数 (浮点数) ); /再从用户处取得一个字符串型的数字 String divisorText = JOptionPane.showInputDialog( 键入除数(浮点数) ); /将类型String转换为类型float float dividend = Float.parseFloat( dividendText ); float divisor = Float.parseFloat( divisorText ); /进行除运算 float quotient = dividend / divisor; /显示结果 JOptionPane.showMessageDialog( null, dividend + 除以 + divisor + 等于n + quotient + ., 结果, JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); /结束程序 / method main / class FloDiv程序清单2-4:DouDiv.java / DouDiv.java/ 演示double型的浮点数除法 import javax.swing.JOptionPane; public class DouDiv public static void main( String args ) /从用户处得到一个字符串型的数字 String dividendText = JOptionPane.showInputDialog( 键入被除数(浮点数) ); /再从用户处取得一个字符串型的数字 String divisorText = JOptionPane.showInputDialog( 键入除数(浮点数) ); / 将类型String转换为类型double double dividend = Double.parseDouble( dividendText ); double divisor = Double.parseDouble( divisorText ); /进行除运算 double quotient = dividend / divisor; / 显示结果 JOptionPane.showMessageDialog( null, dividend + 除以 + divisor + 等于n + quotient + ., 结果, JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); / 结束程序 / method main / class DouDiv实验2.4.2: (D)if选择语句编译MinSecWithIf.java,使用如下命令运行程序:java MinSecWithIf 100注意使用的命令不是java MinSecWithIf观察程序的运行结果,并尝试用其他的正整数来执行。在类名MinSecWithIf后面键入的数字被称做命令行参数。在这个程序中,该命令行参数是总秒数。试着不使用命令行参数来运行这个程序,并观察运行结果。打开MinSecWithIf.java源代码,与MinSec.java源代码相比较。在MinSecWithIf.java中,命令行输入是由语句:int totalSeconds = Integer.parseInt(args0)实现的;在MinSec.java中,输入是通过JOptionPane 对话框,而不是命令行参数实现的。程序清单2-5:MinSecWithIf.java / MinSecWithIf.java/ 将总秒数转换为相应的分钟数和剩余秒数public class MinSecWithIf public static void main( String args ) if ( args.length = 0 ) / 声明程序将做什么 System.out.println( 此程序将转换 n + 一个总秒数为 n + 相应的分钟和剩余秒数 .n + 总秒数应当作为 n + 命令行参数输入 .n ); System.exit(0); / if / 读取总秒数 int totalSeconds = Integer.parseInt(args0); / 计算分钟和剩余秒数 int minutes = totalSeconds / 60; int seconds = totalSeconds % 60; / 显示结果 System.out.println( totalSeconds + 秒等于 + minutes + 分钟加上 + seconds + 秒. ); / method main / class MinSecWithIf 对于这种形式的IF语句,格式为: if (expression) statement(s) 该语句必须以关键字“if”开始。之后,括号中为布尔表达式。该布尔表达式必须计算出一个true或者false值。在本实验中,我们检查用户命令行参数的输入。当没有命令行参数输入时,表达式args.length = 0的运算结果为true,程序执行花括号中的语句(我们把花括号之间的语句部分称为块block),从而打印出一些提示信息,然后程序退出;当有命令行参数输入时,布尔表达式的值为false,程序忽略块中的语句,直接执行块后面的语句。实验2.4.3: (W)练习使用if语句在Lab02文件夹里,新建一个FeetInches.java文件。这个程序将总英寸转化成英尺和英寸(1英尺12英寸)。和MinSec.java类似,程序FeetInches.java使用一个输入对话框来提示输入,结果的输出则使用消息对话框。 编写的程序请使用恰当的变量名,注释和输出。强烈建议读者一句一句自己编写代码,而不仅仅是复制、粘贴和修改变量名以及注释。通过这种方式,可以对Java 程序的基础有一个全面的熟悉,并增强在今后各种JAVA考试中的信心。注意缩排!JAVA编程规范要求每一个缩排要留个空格,不是一个。用空格键(Space Key),而不是制表键(Tab Key),因为制表键所表示的空格数会因文件编辑器的不同而不同。为了减轻缩排的麻烦,我们通常会在输入一个开括号后立即输入闭括号,然后输入括号里面的语句;而不是等完成括号里面的语句输入后再输入闭括号。任何使用对话框的程序都包括语句:System.exit(0);没有这条语句,包含对话框的程序执行到末尾时不会自动结束。在这种情况下要重新获得DOS窗口的控制,使用Ctrl-C键(按住Ctrl键,然后在按住Ctrl键的同时按下C键)。实验2.4.4: (D)更多if语句编译、运行程序BusDialog.java和 Bus.java,一定要理解程序是如何实现的。这两个程序分别使用了对话框和命令行参数,它们都用于计算运送给定数目的乘客所需的车辆数。程序首先计算初步的数目(总人数除以每辆汽车的座位数),然后检查余数是否为,也就是是否有剩余的乘客。如果是,除了初始估计外,还多需要一辆车。程序清单2-6:BusDialog.java / BusDialog.java/ 计算有固定座位数的车在给定乘客数的情况下所需的辆数 import javax.swing.JOptionPane; public class BusDialog public static void main( String args ) / 声明此程序的作用: JOptionPane.showMessageDialog( null, 计算有固定座位数的车n + 在给定乘客数的情况下,n + 所需的辆数. ); / 从用户处得到输入数据 int totalPeople = Integer.parseInt( JOptionPane.showInputDialog( 键入总人数 (整数) ); int seatsPerBus = Integer.parseInt( JOptionPane.showInputDialog( 键入每辆车的座位数 (整数) ); / 计算所需车辆数 int bussesNeeded = totalPeople / seatsPerBus; if ( totalPeople % seatsPerBus 0 ) bussesNeeded = bussesNeeded + 1; / 显示结果 JOptionPane.showMessageDialog( null, bussesNeeded + 辆座位为 + seatsPerBus + 的车 n + 可以运送 + totalPeople + 个人 ); System.exit( 0 ); / 终止程序 / method main / class Busses程序清单2-7:Bus.java / Bus.java/计算有固定座位数的车在给定命令行参数个乘客数的情况下所需的辆数 public class Bus public static void main( String args ) if ( args.length 0 ) bussesNeeded = bussesNeeded + 1; / 显示结果 System.out.println( bussesNeeded + 辆座位为 + seatsPerBus + 的车可以 n + 运送 + totalPeople + 的人 。 ); System.exit( 0 ); / 终止程序 / method main / class Bus实验2.4.5: (W)练习使用if语句在Lab02文件夹里面,新建一个NearYuan.java的文件,它会以对话框的形式提示用户输入一个数字,这个数字表示分,程序会计算出与分价值最接近的整数元。例如:350分最接近4元,而249分最接近2元。实验2.4.6: (D)否定条件编译Compare.java,使用两个命令行参数运行程序:java Compare 4 7该程序的条件语句中使用了否定条件(Negation)。一个条件的否定条件总是:(1)正确的,如果原条件是错误的; (2)错误的,如果原条件是正确的。例如, number1 = number2是 number1 number2不是上面第二个条件的否定条件, 因为当number1和number2相等时这两个条件都是错误的。类似的,条件number1 = number2不是条件 number1 = number2的否定条件,因为当两个数字相等时这两个条件都是正确的。对于条件number1 = number2,两个等号符号表示简单的“等于”,我们使用双等号符号来检验两个表达式是否相等,而一个等号是给一个变量赋值。对于条件 number1 != number2,惊叹号后面接一个等号的意思是“不等于”,很明显,这个条件否定了前一个条件(number1 = number2)。用不同的整数对运行这个程序,这几个整数对包括以下情形:(1)第一个数小于第二个数;(2)第一个数大于第二个数;(3)第一个数等于第二个数。在每种情况中,程序都会显示正确的比较结果。程序清单2-8:Compare.java public class Compare public static void main( String args ) if ( args.length 2 ) System.out.print(此程序将显示两个 ); System.out.println(作为命令行参数输入的 ); System.out.print(整数的比较结果 ); System.out.println(运行此程序键入 :); System.out.println( java Compare int1 int2); System.out.print(使用整数值来替换 ); System.out.println(int1 和 int2.); System.exit(0); / if int number1, / 第一个比较的数 number2; /第二个比较的数 String result; / 存储输出的字符串 / 将String 型转换为int型 number1 = Integer.parseInt( args0 ); number2 = Integer.parseInt( args1 ); / 初始化输出为空字符串 result = ; / 进行比较 if ( number1 = number2 ) result = number1 + = + number2; if ( number1 != number2 ) result = number1 + != + number2; if ( number1 number2 ) result = result + n + number1 + = number2 ) result = result + n + number1 + = + number2; if ( number1 number2 ) result = result + n + number1 + + number2; if ( number1 = number2 ) result = result + n + number1 + = + number2; / 显示结果 System.out.println(比较结果:n + result); / method main / class Compare实验2.4.7: (D)if/else语句 编译、运行OddEven.java并测试不同的命令行参数(奇数和偶数)。程序清单2-9:OddEven.java / OddEven.java/ 测试数字是为奇数还是偶数 public class OddEven public static void main(String args) if ( args.length = 0 ) System.out.print(此程序将判断一正整数 ); System.out.println(是奇数还是偶数 .); System.out.print(键入作为命令行参数 ); System.out.println(的数字 .); System.exit(0); / if int number = Integer.parseInt(args0); if ( number % 2 = 0 ) / 如果数字为偶数 System.out.println(number + 为偶数 .); else System.out.println(number + 为奇数 .); / method main / class OddEven 对于这种形式的条件语句,格式为: if (expression) statements1 else statements2 该条件语句的布尔表达式为true时执行语句statements1,布尔表达式为false时执行语句statements2。不同于if语句,else语句不包含条件。通常,在Java程序中,else语句与前面离它最近的if语句相匹配。如OddEven.java程序中: if ( number % 2 = 0 ) / 如果数字为偶数 System.out.println(number + 为偶数 .); else System.out.println(number + 为奇数 .); 这个程序用一个数字是否可以被2整除来判断该数的奇偶性。被2除后,余数为0的数为偶数;余数为1的数则为奇数。程序中使用了if/else结构,根据if后面括号里的条件的真值来选择两种可能的行为。如果条件(number%2 = 0)是正确的, 即该数被2除后,余数为0,则条件后的陈述语句被执行;否则, else后面的陈述语句被执行。 把 statements1 和 statements2 括在花括号 () 内通常是一个好习惯,这样更清楚,并可以避免无意中造成错误。这里对于if 和else的陈述语句可以不需要大括号,因为当条件正确时只有一条执行语句,而当条件错误时也只有另一条执行语句。假如在一种情况下要执行多于一条的语句,则需要用花括号括起来组成语句块(block)。实验2.4.8: (W)练习if/else语句为Compare.java 保存一个副本,命名为MyCompare.java。在后一个文件里,相应地修改类名和注释。然后修改MyCompare.java,使用3个if/else结构代替6个if结构来实现和Compare.java一样的效果。编译MyCompare.java,用几组不同的数字对进行测试,这些数字对包括以下情形:(1)第一个数小于第二个数;(2)第一个数大于第二个数;(3)第一个数等于第二个数。在每种情况中,程序都要显示正确的比较结果。实验2.4.9: (P)编写程序HourMinSec.java程序要求使用命令行参数来读取一个正整数,这个整数表示总秒数,编写程序输出与总秒数相等的时-分-秒。如果程序无命令行参数输入,DOS窗口将显示一个用户友好的提示信息。提示:用整数除法和模运算,1小时=3600秒。实验2.4.10: (P)编写程序DigitParts.java程序要求使用命令行参数来读取一个三位数,然后把这个三位数分离成单个的数字,最后把这些数字用空格分离的形式显示出来。例如,数字123 会被显示成 1 2 3。提示:用整数除法和模运算来分离数位上的数字。 运行结果示例如图2.1图2.1 实验2.4.10运行结果示例实验2.4.11: (P)编写程序DigitParts2.java为DigitParts.java 保存一个副本,命名为DigitParts2.java。在后一个文件里,相应地修改类名和注释。修改DigitParts2.java,当用户的输入不是三位数时(如45,4258),程序会显示用户友好的错误提示信息。当然,如果用户没有正确输入命令行参数,这个程序也应该显示用户友好的的错误提示信息。实验2.4.12: (W)JAVA中符号“+”的使用 编译并运行Plus.java,然后用记事本打开它,这个程序在DOS窗口输出:68 366 7852程序清单2-10:Plus.java / Plus.java/ 演示加法和字符串连接 public class Plus public static void main(String args) System.out.println(23 + 45 + 366 + 78 + 52); / method main / class PlusJAVA语言中,加号“+”可以用做加法运算(当它出现在两个数字之间),也可以用做字符串的连接(当它出现在两个字符串之间,或者在一个字符串和一个数字之间。在这种情况下,数字会被自动转换成字符串然后和另一个字符串连接)。 Plus.java程序中System.out.println语句里的四个加号按照从左到右的顺序被依次定义。最左端的加号是加法运算,因为它出现在两个整数之间;第二个加号是字符串连接运算,因为它出现在一个数学表达式 23 + 45 和字符串 “ 366 ”之间;第三个加号是字符串连接运算,因为它出现在字符表达式23 + 45 + “ 366 ” 也就是“68 366”和正整数78之间。最右边的加号是字符串连接运算,因为在它左边所有的表达式在第四个加号未定义之前已经运算并生成了字符串“68 366 78” 。最终生成的字符串为“68 366 7852 “。和代数运算一样, 在表达式中加括号可以改变运算的顺序。 为Plus.java 保存一个副本,命名为MyPlus.java,在源代码中只插入两个括号,使程序输出成为: 68 366 130 除了加入两个括号之外,代码不要做任何其他的修改。实验2.4.13: (I)浮点数的比较1. 编译和运行Comp3Flo.java程序,使用三个浮点数类型的命令行参数,这个程序会找出这三个数中最大的那个数。程序清单2-11:Comp3Flo.java / Comp3Flo.javapublic class Comp3Flo public static void main( String args ) if ( args.length number2 ) largest = number1; else largest = number2; if ( number3 largest ) largest = number3; System.out.println(数字 + number1 + , + number2 + , 和 + number3 + 的最大数为 + largest + .); / method main / class Comp3Flo 如果输入没有小数点的命令行参数,这些参数会被自动的转换成浮点数,然后用小数点的形式显示出来。例如,C:Lab02java Comp3Flo 6 1 4.2数字 6.0, 1.0, 和 4.2 的最大数为 6.0. 用不同的输入测试这个程序。测试3个不同数字的6种不同组合:(1) 最小的数,中间的数,最大的数(2) 最小的数,最大的数,中间的数(3) 中间的数,最小的数,最大的数(4) 中间的数,最大的数,最小的数(5) 最大的数,最小的数,中间的数(6) 最大的数,中间的数,最小的数即使三个数字中有两个或两个以上的数字相等时,程序也可以正确地找出最大的数字。仔细阅读这个程序,理解程序中每一行代码的意义。 找出三个数字中最大数的关键代码如下:float largest;if ( number1 number2 )largest = number1;elselargest = number2;if ( number3 largest )largest = number3;第一行代码只声明(declare)了变量largest,并没有给largest变量赋初始值。largest变量的初始值是由if/else结构中条件number1 number2 决定的。如果number1大于number2,执行初始赋值语句 largest = number1, 变量largest的初始值等于number1;反之,变量largest的初始值等于number2。2. 为Comp3Flo.java 保存一个副本,命名为MyComp3Flo.java。修改MyComp3Flo.java源码的类名和注释,编译程序,确保程序正确运行。修改MyComp3Flo.java源码。在变量largest声明前加上注释/,在if/else结构中声明变量并同时对其赋初值。修改后的代码段如下:/ float largest;if ( number1 number2 )float largest = number1;elsefloat largest = number2;试着编译修改后的程序。 显然,编译不会通过。这是由于变量largest在赋初值前只能声明一次。3. 修改MyComp3Flo.java源码,使之能正确编译。程序编译通过后,进一步修改源码。用一对if结构代替if/else结构,修改后的代码段如下:float largest;if ( number1 number2 )largest = number1;if ( number1 largest ) 1 错误 编译错误的原因在于编译器(Compiler)无法识别条件number1 number2 是条件 number1 largest ) 语句中使用时,两个初始赋值语句可能都没有执行,变量largest可能尚未初始化。4. 目前对变量初始化问题的讨论只局限于方法里的局部变量。在完成的实验中,main方法里定义的变量都是局部变量。对于这种类型的变量,必须明确地进行初始化。如果在没有初始化之前就试图使用它,程序就无法编译。如果初始化的语句在if块中,必须要让变量在第一次使用前能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译不能通过,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,从而违反了局部变量使用前必须初始化的规定。但如果使用if/else结构并且在每个分支中都有初始化语句,程序就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的情况。实验2.4.14: (P)编写程序Comp4Flo.java程序使用四个浮点数为命令行参数,并找出这四个数中的最大数和最小数。程序的执行和输出如下:C;Lab02java Comp4Flo 4 3 1 2在数字 4.0, 3.0, 1.0, 和 2.0中, 最大值为 4.0, 最小值为 1.0.如果用户输入的参数少于四个,程序将输出用户友好的错误提示信息。由于4个不同数字的排列组合方式有24种可能。为了便于程序的测试,使用批处理文件Comp4Flo.bat。扩展名为.bat的文件是批处理文件,它是无格式的文本文件,包含一条或多条命令。在DOS命令提示窗口中键入批处理文件的名称,系统就会按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。Comp4Flo.bat批处理文件位于Lab02目录下,在DOS命令提示窗口中,执行:C:Lab02Comp4Flo程序清单2-12:Comp4Flo.bat java Comp4Flo 1 2 3 4java Comp4Flo 1 2 4 3java Comp4Flo 1 3 2 4pausejava Comp4Flo 1 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年秋九年级化学上册 1 走进化学世界说课稿 (新版)新人教版
- 第1课《计算机网络》说课稿 2024-2025学年浙教版(2023)初中信息技术七年级上册
- 第11课 奇妙的爬行(教学设计)-2023-2024学年人美版(2012)美术一年级下册
- 农村合作社养殖合作协议条款细则及规范
- 2025年公路客运行业投资趋势与盈利模式研究报告
- (2025年标准)护士异地分居协议书
- (2025年标准)户口离婚协议书
- (2025年标准)宏志班保送协议书
- 2025年美容机构行业规模分析及投资前景研究报告
- 2025年光通信器件行业需求分析及创新策略研究报告
- 2023年高考作文备考之广东重点中学六校四联“鲁侯养鸟”分析
- 半导体制造工艺基础之扩散工艺培训课件
- 溶剂油MSDS危险化学品安全技术说明书
- 检验标本的采集与运送课件
- 济南版生物七年级下册课程纲要
- 福建升辉鞋业有限公司年加工EVA鞋底385万双、TPR鞋底65万双、PVC鞋底60万双项目环评报告表
- 胸腺瘤诊断治疗指南
- 班主任到场签到表
- 视网膜静脉阻塞.LM
- 海底捞-A级门店管理制度
- 《陶行知教育名篇》读书笔记(课堂PPT)
评论
0/150
提交评论