且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Java程序设计习题精析与实验指导》一2.3 实验指导

更新时间:2022-09-26 10:49:06

2.3 实验指导

2.3.1 实验目的与要求

  1. 通过实验熟悉Java的数据类型及有关的取值范围。
  2. 掌握不同数据类型的常量、变量的定义与使用方式。
  3. 理解Java的关键字和自定义标识符的命名规则。
  4. 熟悉运算符和表达式的使用以及掌握不同类型数据的转换规则。

2.3.2 实验样例

一、程序改错
下面的程序使用“?:”运算符实现求一个变量的绝对值,设该变量的值为8,则程序运行结果如图2-2所示。

《Java程序设计习题精析与实验指导》一2.3 实验指导

找出下列程序中的错误,并将其改正。

#1  public class TernaryTest {
#2    public static void main(String[] args) {
#3        int a,b;
#4        a=8;
#5        b=a>0?-a:a;
#6        System.out.println(a "的绝对值是:" b);
#7        a=-8;
#8        b=a<0?-a:a;
#9        System.out.println(a;"的绝对值是:";b);
#10    }
#11 }

答案:

#5  应改正为:b=a<0?-a:a;
#6  应改正为:System.out.println(a+"的绝对值是:"+b);
#9  应改正为:System.out.println(a+"的绝对值是:"+b);

解析:根据条件运算符“?:”的运算规则,它首先判别表达式a>0的值,由于当前a=8,故表达式的值为真,则返回–a的值,这显然是不合要求的。因此要将表达式改为a<0。在第6行的输出语句中,变量a之后与变量b之前的加号的作用是:让a的取值与它后面的字符串以及b的取值相连接,然后再输出结果字符串(实际上在连接的过程中首先将a和b转换成等同的字符串然后再进行连接)。一般来说,在println()方法中若要将多个字符串连在一起,通常是用加号来实现的。第9行语句的修改理由与第6行是一样的。
二、编程题
编写程序,利用System.out.println()方法分别输出下列语句的执行结果:
1)将变量a的初值赋值为10,变量b的初值赋值为5。
2)变量a的值加2,变量b的值加5。
3)求a和b的平均值,并将该值赋予变量c。
4)将a的平方乘以b的平方并赋值给变量d。
答案:程序代码如下:

public class Expression {
    public static void main(String[] args) {
        int a=10,b=5;
        double c;
        long d;
        System.out.println("a="+a+"   b="+b);
        a+=2;
        b+=5;
        System.out.println("a="+a+"   b="+b);
        c=(a+b)/2;
        System.out.println("c="+c);
        d=(long)(Math.pow((double)a,2)*Math.pow((double)b,2));
        System.out.println("d="+d);
    }
}

解析:Java语言规定:任何变量在使用之前必须声明,在变量声明的过程中允许同时对变量进行赋值。程序中的“a+=2;”与“b+=5;”语句是在变量a和b已被赋值的情况下的复合赋值运算语句;本程序中使用的pow(double a,double b)方法,返回第一个参数(a)的第二个参数(b)次幂的值,即ab的值。该方法被封装于java.lang的Math类中。值得注意的是:这个方法的两个参数都必须是double类型,但由于我们所声明的a和b变量都为int类型,因此在使用前必须进行强制转换,同时我们声明的变量d是long类型,因此当乘法运算结束时,必须再一次将结果强制转换为long类型数据才能赋值给d。
在这里使用的pow()方法,在第1章中所提到的API文档中有着详细的介绍,希望大家在今后的学习过程中对这部分内容要时常地加以熟悉。

2.3.3 实验内容

一、观察与思考

  1. 编写声明不同数据类型变量的程序文件SY2_1.java,源代码如下:
public class SY2_1 { 
    public static void main(String args[]) { 
        byte mb=050; 
        short ms=0xff; 
        int mi=1000000; 
        long ml=0xffff; 
        char c='a';
        float mf=0.25f;
        double md=0.8E-3; 
        boolean B=true; 
    } 
} 

在原有代码后面加上相应的输出语句,输出变量的值。编译并运行该程序,仔细观察其运行结果。
程序分析:
在程序的第3行至第6行的语句中,可以看到:对于Java的整型变量,不管以何种数制进行输入,系统总会将其转换为十进制数进行输出。
在程序的第7行语句中,Java的字符型常量值是用单引号引起来的一个字符,双引号用来表示字符串,两者切记不可混用。
在程序的第8行语句中,语句的最后加了一个数据类型符f,为什么要加这个符号呢?这是为了“告诉”编译器将该常数按程序员指定的数据类型(该处为单精度型)进行处理,因为编译系统在处理类似“0.25”这样的“直接常数”时,有其默认的处理规则:对于整数一律按int类型处理;对于浮点数一律按double类型处理。第8行的语句若是不加f的话,编译器就会将数据0.25按double类型处理,double类型的数据要赋值给float类型的变量,系统不能进行自动转换,因此就会出现编译错误。对于第6行的语句,正规的赋值语句应该是“long ml=0xffffL;”,若是后面不加L,编译器将把十六进制数ffff转换为十进制数65535后按int类型处理,由于65535属于int类型的处理范围,因而处理完毕后赋值给长整型变量ml,int类型的数据到long类型的数据,系统可以进行自动转换,因此不会出错。
在程序的第10行语句中,Java的布尔型常量只有两个值:false和true,使用时两边不能加任何引号。

  1. 建立SY2_2.java 文件,通过本程序了解变量的使用范围,源代码如下:
public class SY2_2 { 
    static int a=10; 
    public static void main(String args[]) { 
        { 
            int b=20; 
            System.out.println("a="+a); 
            System.out.println("b="+b); 
        } 
        System.out.println("a="+a); 
        System.out.println("b="+b); 
    } 
} 

观察编辑窗口的提示情况,试修改上面的程序,然后编译并运行该程序。
程序分析:
此时会出现错误提示。因为变量b在方法块中声明,在方法块之外它是不存在的, 所以此时系统会提示出错。修改方法有两种:一是将变量b作为静态变量声明到第二行(即变量a的声明语句)的后面,二是干脆删除第10行关于变量b的输出语句。
二、程序改错

  1. 下面的程序为完成变量初始化及赋值的操作,请改正其中错误的语句。
#1 public class Getval {
#2     public static void main (String args []) {
#3             int x, y;
#4             float z = 3.414;
#5             double w = 3.1415;
#6             boolean tru = true;
#7             char c;
#8             String str1 = 'bye';
#9             c = "A";
#10            x = 6;
#11            y = 1000;   
#12    }  
#13 }
  1. 下面的程序实现变量的初始化、赋值、运算以及输出的操作,请改正其中错误的语句。
#1  public class Statval {
#2     public static main(String[] args) {
#3     int x = 2, y = 4, z = 6;
#4         a = x + y – 2*2 + z;
#5         System.out.println(a);
#6         a = (x + y – 2)*(2 + z);
#7         System.out.println(a);
#8     }
#9  } 

三、编程题
编写一个Java Application,其功能为:在程序中取两个随机整数(10~300),以如图2-3所示形式显示它们的和(设两个随机数分别为204和94)。

《Java程序设计习题精析与实验指导》一2.3 实验指导

提示:可在java.lang.Math类中调用random()方法,random()为实现取0~1之间的随机数方法,该方法返回值是正数,类型为double。如果要得到其他范围的数,则要进行相应的转换。例如要得到(a,b)之间整数的方法可写为:(int) ((b–a+1)Math.random()+a),若要得到(0,99)之间的整数可以使用语句:int m = (int) (100Math.random())。