当前位置:首页 > JAVA快速入门练习2
// Plus.java
// 演示加法和字符串连接
public class Plus {
public static void main(String[] args) {
System.out.println(23 + 45 + \ } // method main } // class Plus
JAVA语言中,加号“+”可以用做加法运算(当它出现在两个数字之间),也可以用做字符串的连接(当它出现在两个字符串之间,或者在一个字符串和一个数字之间。在这种情况下,数字会被自动转换成字符串然后和另一个字符串连接)。
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.java
public class Comp3Flo {
public static void main( String args[] ) { if ( args.length < 3 ) {
System.out.print(\此程序将找出\
System.out.println(\个作为命令行参数输入\ System.out.println(\的浮点数中的最大值.\ System.out.println(\运行此程序键入: \
System.out.println(\ java Comp3Flo num1 num2 num3\ System.out.print(\用数字值替代\
13
System.out.println(\和num3.\
System.exit(0); } // if
float number1 = new Float(args[0]).floatValue(); float number2 = new Float(args[1]).floatValue(); float number3 = new Float(args[2]).floatValue();
float largest;
if ( number1 > number2 ) largest = number1; else
largest = number2;
if ( number3 > largest ) largest = number3;
System.out.println(\数字\ + \ + \和\
+ \的最大数为 \
} // method main } // class Comp3Flo
如果输入没有小数点的命令行参数,这些参数会被自动的转换成浮点数,然后用小数点的形式显示出来。例如,
C:\\Lab02>java Comp3Flo 6 1 4.2 数字 6.0, 1.0, 和 4.2 的最大数为 6.0.
用不同的输入测试这个程序。测试3个不同数字的6种不同组合:
(1) 最小的数,中间的数,最大的数 (2) 最小的数,最大的数,中间的数 (3) 中间的数,最小的数,最大的数 (4) 中间的数,最大的数,最小的数 (5) 最大的数,最小的数,中间的数 (6) 最大的数,中间的数,最小的数
即使三个数字中有两个或两个以上的数字相等时,程序也可以正确地找出最大的数字。仔细阅读这个程序,理解程序中每一行代码的意义。
找出三个数字中最大数的关键代码如下:
float largest;
14
if ( number1 > number2 )
largest = number1; else
largest = 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; else
float largest = number2; 试着编译修改后的程序。 显然,编译不会通过。这是由于变量largest在赋初值前只能声明一次。
3. 修改MyComp3Flo.java源码,使之能正确编译。
程序编译通过后,进一步修改源码。用一对if结构代替if/else结构,修改后的代码段如下:
float largest;
if ( number1 > number2 )
largest = number1;
if ( number1 <= number2 )
largest = number2; 重新编译程序,将得到的错误提示信息写在下面: Comp3Flo.java:29: 可能尚未初始化变量 largest if ( number3 > largest ) ^
1 错误
编译错误的原因在于编译器(Compiler)无法识别条件number1 > number2 是条件 number1 <=number2的否定条件。因此,编译器认为可能在某种情况下,这两个布尔表达式都为false。当变量largest 在
if ( number3 > largest ) 语句中使用时,两个初始赋值语句可能都没有执行,变量largest可能尚未初始化。
15
4. 目前对变量初始化问题的讨论只局限于方法里的局部变量。
在完成的实验中,main方法里定义的变量都是局部变量。对于这种类型的变量,必须明确地进行初始化。如果在没有初始化之前就试图使用它,程序就无法编译。如果初始化的语句在if块中,必须要让变量在第一次使用前能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译不能通过,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,从而违反了局部变量使用前必须初始化的规定。
但如果使用if/else结构并且在每个分支中都有初始化语句,程序就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的情况。
实验2.4.14: (P)编写程序Comp4Flo.java
程序使用四个浮点数为命令行参数,并找出这四个数中的最大数和最小数。程序的执行和输出如下:
C;\\Lab02>java 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:\\Lab02>Comp4Flo
程序清单2-12:Comp4Flo.bat java Comp4Flo 1 2 3 4 java Comp4Flo 1 2 4 3 java Comp4Flo 1 3 2 4 pause
java Comp4Flo 1 3 4 2 java Comp4Flo 1 4 2 3 java Comp4Flo 1 4 3 2 pause
java Comp4Flo 2 1 3 4 java Comp4Flo 2 1 4 3 java Comp4Flo 2 3 1 4 pause
java Comp4Flo 2 3 4 1 java Comp4Flo 2 4 1 3 java Comp4Flo 2 4 3 1 pause
java Comp4Flo 3 1 2 4 java Comp4Flo 3 1 4 2
16
共分享92篇相关文档