JAVA快速入门练习2(5)

2019-04-14 19:37

仔细检查程序并核实while循环是否符合上个实验中提到的五项要求。

实验2.4.18: (W)求输入浮点数的平均值

1. 编译、运行PrintCommandLine.java,输入任意个数的数字为命令行参数。不论你输入了哪一种

类型的多少个数字,程序会把输入的数字重新显示一遍。源代码见程序清单2-16。

程序清单2-16:PrintCommandLine.java

// PrintCommandLine.java

// 通过输出命令行参数来演示循环

public class PrintCommandLine {

public static void main(String[] args) { if ( args.length == 0 ) {

System.out.println(\此程序将重复命令行参数。\ System.exit(0); } // if

System.out.print(\键入的是: \

int index = 0;

while ( index < args.length ) {

System.out.print(\ index = index + 1; } // while

System.out.println(); // 结束行 . } // method main

} // class PrintCommandLine

args是一组命令行参数,args[0]、args[1]…args[n-1]分别表示第1,第2 … 第n个命令行参数,等等。方括号里面的数字称为下标。下标可以是非负整数,也可以使用变量。当然,这个作为下标的变量的值必须是非负整数。

PrintCommandLine.java程序中使用变量index为下标,每次循环下标变量值递增1,使得每一次循环都能访问一个命令行参数。

2. 注意while循环中语句的先后顺序,将原来的代码:

System.out.print(\index = index + 1;

改变为:

index = index + 1;

System.out.print(\

21

重新编译和使用命令行参数运行程序,修改后的程序可以通过编译,但是运行会出现错误。将MS-DOS窗口显示的错误信息写下来:

键入的是: 2Exception in thread “main” java.lang.ArrayIndexOutOfBoundsExceptio n: 2

at PrintCommandLine.main(printCommandLine.java:16)

执行第1次循环,变量index的值自增后为1,args[index]即args[1]实际为第2个命令行参数(第1个命令行参数没有访问到);最后一次循环,访问的args[index]实际为第index+1个命令行参数,而这样的参数并不存在,显示的错误信息提示数组下标越界了。这种类型的编程错误在循环语句中很常见,也被称为off-by-1错误。

3. 在Lab02文件夹里面,编写一个命令行应用程序AverageN.java。

程序计算一列数字的平均值,这列数字以命令行参数的形式输入。例如,用户输入下列语句:

java AverageN 1 2 3 4 程序应该输出数字1, 2, 3, 4的平均值,也就是2.5。程序应该能处理输入的任意多个命令行参数。假如没有命令行参数输入,MS-DOS窗口将显示一个用户友好的提示信息。

使用浮点数除法计算平均值,平均值要精确到小数点后一位。[提示:使用DecimalFormat格式化数字]。例如,用以下语句运行:

java AverageN 1 1 2

输出应该是:

The average is 1.3.

避免在程序中出现无限循环,MS-DOS下使用 [Ctrl]-C 键(按住Ctrl键不放,同时按下C 键) 可以强行终止程序。

实验2.4.19: (P)编写程序Interest.java

计算银行本金连同利息之和达到本金的2倍时要多少年。程序可以接受两个命令行参数,这两个参数分别是的double和float类型,第一个数字表示银行本金,第二个数字表示年利率。假设使用复利(复利就是“利生利”、把每年的利息加上本金又作为下一年的本金),同时假设没有取款和存款的情况发生。假如用户没有恰当输入命令行参数,程序应该显示用户友好的提示信息。

实验2.4.20: (D)嵌套的if/else语句

if/else语句中,if或else的语句块中还可以嵌套if/else语句。这提高了编程的灵活,同时也容易使程序变得非常混乱。

缩排的使用对编写这样的代码非常重要。if/else结构越大越复杂,错误的缩进格式越有可能导致错误的判断。对于复杂的if/else语句,即使采用了正确的缩进格式,程序的逻辑看起来可能也不是很明显。如果一组if/else语句看起来有些复杂,在编写程序时,应总是使用{ }括号,使代码更清晰。

编译、运行PlugIfElseDemo.java程序。用不同的参数进行测试,这些数字包括0、-1、1000和1001。PlugIfElseDemo.java中的嵌套if/else结构:

if ( number <= 1000 )

22

if ( number >= 0 )

System.out.println(number + \是界于0到1000之间。 \

else

System.out.println(number + \小于0。 \

else

System.out.println(number + \大于1000。\

这里没有用{ }括号,编译器会自动地把每个else与它前面最近的那个if配对。 下面这种if/else语句嵌套可以产生同样的输出: if ( number > 1000 ) System.out.println(number + \大于1000。\else

if ( number < 0 )

System.out.println(number + \小于0。\else

System.out.println(number + \是界于0到1000之间。\

后面的这个例子中,第一个else的程序块包括另一个if/else结构。在这种情况下,if/else结构通常按下面的缩排形式书写:

if ( number > 1000 )

System.out.println(number + \大于1000。\else if ( number < 0 )

System.out.println(number + \小于0。\else

System.out.println(number + \是界于0到1000之间。\

程序清单2-17:PlugIfElseDemo1.java

// PlugIfElseDemo1.java

// Demonstrates nested if/else with // indentation to show the nesting.

public class PlugIfElseDemo1 {

public static void main(String[] args) { if ( args.length == 0 ) {

System.out.print(\此程序判断一个\

System.out.println(\作为命令行参数输入\ System.out.print(\的浮点数是否界于\ System.out.println(\到1000之间.\ System.exit(0); } // if

float number = new Float(args[0]).floatValue();

if ( number <= 1000 ) if ( number >= 0 )

System.out.println(number + \是界于0到1000之间。\

23

else

System.out.println(number + \小于0。\ else

System.out.println(number + \大于1000。\ } // method main

} // class PlugIfElseDemo1

实验2.4.21: (W)编写程序Age.java

输入的程序命令行参数表示一个人年龄的数字。假如这个输入不少于65,程序会输出:你到了退休的年龄了。假如这个输入不少于18却小于65, 程序会输出:你具有投票的权利但还没有到退休的年龄。假如输入是大于等于0但小于18,程序会输出:你还没有到投票的年龄。假如这个输入小于0,程序会输出:怎么?你还没有被生下来?

假如没有命令提示行的输入,程序会输出一个用户友好的提示信息。

实验2.4.22: (D)数据类型char

1. 编译运行程序PlugIfElseDemo2.java和PlugIfElseDemo3.java。

PlugIfElseDemo2.java程序的缩排更精确地反映了程序的实际判断过程,编程中则更普遍使用后一个程序中的缩排格式。

PlugIfElseDemo2.java和PlugIfElseDemo3.java程序中都使用了变量类型char,它是一个原始数据类型。声明一个char类型的变量:

char grade; char类型的变量用于存储字符,它的值是用单引号括起的,如下: grade = 'A';

与双引号括起的字符串不同。字符串(String)是一个包含一串字符的对象。因此,表达式‘A’和“A”并不表示同样的事物。‘A'是一个字符类型的字母A,而“A”是一个字符串对象。

程序清单2-18:PlugIfElseDemo2.java

// PlugIfElseDemo2.java

// 用缩排形式来演示嵌入式if/else语句

public class PlugIfElseDemo2 {

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 score = Integer.parseInt(args[0]);

24

char grade;

if ( score >= 90 ) grade = 'A'; else

if ( score >= 80 ) grade = 'B'; else

if ( score >= 70 ) grade = 'C'; else

if ( score >= 60 ) grade = 'D';

else // if ( score < 60 ) grade = 'F';

System.out.println(\分数为\的等级为\ } // method main

} // class PlugIfElseDemo2 程序清单2-19:PlugIfElseDemo3.java

// PlugIfElseDemo3.java

// Demonstrates nested if/else with indentation // standard for a multiway branch.

public class PlugIfElseDemo3 {

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 score = Integer.parseInt(args[0]); char grade;

if ( score >= 90 ) grade = 'A';

else if ( score >= 80 ) grade = 'B';

else if ( score >= 70 ) grade = 'C';

25


JAVA快速入门练习2(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:年机关党委创先争优承诺书范文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: