博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java程序设计习题精析与实验指导》一2.3 实验指导
阅读量:5936 次
发布时间:2019-06-19

本文共 4107 字,大约阅读时间需要 13 分钟。

2.3 实验指导

2.3.1 实验目的与要求

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

2.3.2 实验样例

一、程序改错

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

screenshot

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

#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)。

screenshot

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

转载地址:http://dfntx.baihongyu.com/

你可能感兴趣的文章
Tay继任者:微软人工智能聊天机器人Zo上线测试
查看>>
农业物联网应用发展分析
查看>>
5G进度卡关 联发科应如何解困?
查看>>
工信部全面推进移动物联网(NB-IoT)建设发展
查看>>
微软员工:与纳德拉共事,像坐过山车一样刺激
查看>>
《Ext JS权威指南》——2.2节配置使用Ext JS库
查看>>
美第四大有线服务供应商宣布5年完成10Gbps光纤网络推广工作
查看>>
前三季度贵安新区完成大数据产业规模197.96亿元
查看>>
瞄准500亿元规模 湖北打造国家级大数据产业基地
查看>>
联想集团涨超7% 杨元庆持股比例升至8.12%
查看>>
知识产权服务商智慧芽完成C轮融资 红衫资本领投
查看>>
云计算出海!阿里云将成新加坡智慧国家战略“军师”
查看>>
美国新泽西光纤交易所扩建数据中心校园设施
查看>>
大杀器!苹果A10X处理器曝光:10nm工艺/全新GPU
查看>>
网络边界的迷失?关键要获得真实可视性
查看>>
城市智慧商圈将进行试点建设
查看>>
评论:是什么能够让英特尔、清华大学等三方携手?
查看>>
携手易维帮助台,神州数码轻松搞定IT外包服务
查看>>
珠海航展将首次利用大数据技术进行交通诱导
查看>>
梅耶尔将对雅虎“开刀”:裁员15%,关闭部分业务
查看>>