R4.1 用Java语言写出下面的数学表达式。
略
答:略
R4.2 用数学符号写出下面的Java表达式。
略
答:略
R4.3 指出如下二次方程式的错误
R4.4 举例说明整数溢出。若使用浮点数,该示例能正确计算吗?举例说明浮点的传入误差。若使用整数,该示例能正常计算吗?该练习应假设用足够小的单位表示值,如用美分而不是美元来表示,这样这些值就不会有小数部分。
答:可以。
R4.5 编写一个测试程序,以执行下面的语句:
CashRegister register = new CashRegister();
register.recordPurchase(19.93);
register.enterPayment(20,0,0,0,0);
System.out.println("Change="+register.giveChange());
结果是0.070000000000000000000000000000028,解释其原因。给出改进程序的建议,以便用户不会对输出感到迷惑不解。
答:浮点数的问题
R4.6 解释n=(int)x;
n=(int)Math.round(x);当x为何值时,两个表达式的结果相同?当x为何值时,两个表达式的结果不同?
答:当x的小数位小于0.5时,两个表达式的结果相同
R4.7 解释n=(int)(x+0.5);
n=(int)Math.round(x);当x为何值时,两个表达式的结果相同?当x为何值时,两个表达式的结果不同?
答:两个表达式的结果总相同
R4.8 解释2,2.0,'2',"2"和"2.0"之间的差异
答:2是整型,2.0是浮点型,'2'是字符型,"2"和"2.0"是字符串
R4.9 解释下面两个程序各自计算什么?
x=2;
y=x+x;
和
s="2";
t=s+s;
答:两个数字相加和两个字符串的拼接
R4.10 未初始化的变量可能是个严重问题。应该用0初始化每个变量吗?解释这么做的优缺点。
答:每个都初始化为0会浪费系统的性能
R4.11 判断对错(x是int型变量,s是String变量)。
a. Integer.parseInt(""+x)与x相同
b.""+Integer.pauseInt(s)与s相同
c.s.substring(0,s.length())与s相同
答:都对
R4.12 怎样获得字符串的第一个字符?怎样获得最后一个字符?怎样删除第一个字符?怎样删除最后一个字符?
答:s.substring(0,1),s.substring(s.length()-1,s.length()),s=s.substring(1,s.length()),s=s.substring(0,s.length()-1)
R4.13 怎样获得整数的最后一位数?怎样获得整数的第一位数?也就是说,若n为23456,怎样找出第一位数2和最后一位数6呢?不要将数字转换成字符串.提示%,Math.log
答:(int)(23456/Math.pow(10, (int)Math.log10(23456)))和23456%10;
R4.14 本章有几个涉及变量和常数使用的建议,这些建议是为了使程序更容易阅读和维护而提出的。请总结这些建议。
答:使用具体变量,常数全部用大写
R4.15 什么是final变量?不提供初值能定义final变量吗?(试一试)
答:不能
R4.16 下面这些表达式的值是什么?每行都假设
double x = 2.5;
double y = -1.5;
int m = 18;
int n=4;
String s = "Hello";
String t = "World";
a. x + n*y - (x+n)*y;
b.m/n +m%n;
c.5*x -n/5;
d. Math.sqrt(Math.sqrt(n));
c.(int)Math.round(x)
f.(int)Math.round(x)+(int)Math.round(y)
g.s+t;
h.s+n;
i.1-(1-(1-(1-(1-n))))
j.s.substring(1,3)
k.s.length()+t.length();
答:略