R6.1 找出下面if语句中的错误。
a.if quarter>0 then System.out.println(quarters + "quarters");
b.if(1+x>Math.pow(x,Math.sqrt(2)) y=y+x;
c.if(x=1) y++;else if(x=2) y=y+2;
d.if(x&&y==0){x=1;y=1;}
e.if(1<=x<=10)System.out.println(x);
f.if(!s.equals("nickels")||!s.equals("pennies")
||!s.equals("dimes")||!s.equals("quarters")){
System.out.println("Input error");
}
g.if(input.equalsIgnoreCase("N")||"NO") return;
h. int x = Integer.parseInt(input);
if(x!=null) y= y+x;
i.language="English";
if(country.equals("US"))
if(state.equals("PR")) language="Spanish";
else if(country.equals("China")) language="Chinese";
答:
a. 应该用if ... else ...
b.少了一个括号
c.判断语句应该是x==1
d.x&&y是Boolean类型,不能和0比较
e.应该用x>=1&&x<=10
f.应该用!(s.equals("nickels")||s.equals("pennies")
||s.equals("dimes")||s.equals("quarters")))
g.应该为:if(input.equalsIgnoreCase("N")||input.equalsIgnoreCase("NO"))
h.普通数字类型不能和null比较
i.少了一个else
R6.2 解释下列术语,并举例说明每种结构
a.表达式
b.条件
c.语句
d.简单语句
e.复合语句
f.块
答:a.求值语句
b.表达式的判断
c.Java一个执行单元
d.不带分支的语句
e.带分支的语句
f.语句组织
答:a.由于变量和操作符组合,用于求值
b.表达式的判断
c.Java一个执行序列
d.不带分去的语句
e.带分支的语句
f.语句的组合
R6.3 解释if/else/else语句和嵌套if语句之间的差异。举例说明每种语句。
答:if/else/else是顺序判断,嵌套if语句是层次判断
R6.4 给出一个与测试顺序无关的if/else/else语句实例。给出和一个与测试有关的if/else/else语句的实例
答:
与顺序无关:if(x==4){...} else if(x==6){...}
R6.5 按钮字典顺序,下列字符串对中哪个字符排在前面?
a."Tom","Dick"
b."Tom","Tomato"
c."church","Churchill"
d."car manufacturer","carburetor"
e."Harry","hairy"
f."C++","Car"
g."Tom","Tom"
h."Car","Carl"
i."car","bar"
j."101","11"
k."1.01","10.1"
答:略
R6.6 求出布尔输入p,q和r的所有组合构成的表达式的真值,来完成下面的真值表
p | q | r | (p&&q)||!r | !(p&&(q||r)) |
false | false | false | ||
false | false | true |
答:
p | q | r | (p&&q)||!r | !(p&&(q||r)) |
false | false | false | true | true |
false | false | true | false | true |
R6.7 在实现复杂的算法之前,最好先理解和分析算法。本习题的目的是为了更好地理解6.3.2节的税款计算算法。
免税代码的一个特征是婚姻惩罚。在某些情况下,一对已婚的夫妻所缴纳的税收要高于两个均单身的伙伴所缴纳的税款之和。请找出这种收入水平的实例。
答:略
R6.8 判断对错:对任何布尔条件的A与B来说,A&&B B&&A一样。
答:不对
R6.9 解释下面两个程序段的差异。
s=0;
if(x>0) s++;
if(y>0)s++;
和
s=0;
if(x>0)s++;
else if(y>0)s++;
答:当x>0而且y>0时,第一个s加了两次,第二个s只加了一次
R6.10 用德摩根律简化下面布尔表达式。
a.!(x>0 && y>0)
b.!(x!=0 || y!=0)
c.!(country.equals("US") && !state.equals("HI") && !state.equals("AK"))
d.!(x%4!=0 || !(x%100==0 && x%400==0))
答:a.x<=0||y<=0
b.x==0 && y==0
c.!country.equals("US")||state.equals("HI")||state.equals("AK")
d.x%4==0 &&(x%100==0 && x%400==0)
R6.11 用下列语句编写另一个说明悬空else问题的Java代码实例。若学生的GPA(必修课平均成绩)高于 1.5分但低于2分,则该生留校察看;若低于1.5分,则该生退学。
答:if(gpa>1.5) if(gpa<2) 留校察看 else 退学
R6.12 解释==运算符与equals方法在比较字符串时的差异。
答:当两个字符的对象相同时==才成立
R6.13 解释下面两种测试的差异
r==s
和
r.equals(s)
其中,r和s都是Rectangle类型
答:略
R6.14 下面判断r是否为null的测试中哪里有错?如果该代码运行会发生什么?
Rectangle r;
if(r.equals(null)) r = new Rectangle(5,10,15,20);
答:r为null时会出错
R6.15 解释字符串的字典顺序与字典或电话簿的单词顺序有什么差异。提法:考察类似IBM,wiley.com,Centry 21,White-U-Wait和7-11的字符串
答:略
R6.16 编写一段代码,测试Line2D.Double类型的两个对象在图形显示器上显示时是否表示同一条线。不要用a.equals(b)。
Line2D.Double a;
Line2D.Double b;
if(条件) g2.drawString("They look the same!",x,y);
提示:如果p和q是点的话,那么Line2D.Double(p,q)和Line2D.Double(q,p)看起来一样。
答:略
R6.17 解释浮点数比较比整形数比较困难的原因,编写一段Java代码测试整数n是否等于10和浮点数是否等于10。
答:略
R6.18 考察下列测试,查看点是否落在矩形内。
Point2D.Double p = ...
Rectangle r = ...;
boolean xInside = false;
if(r.getX()<=p.getX() && p.getX()<=r.getX()+r.getWidth())
xInside = true;
boolean yInside = false;
if(r.getY()<=p.getY() && p.getY()<=r.getY()+r.getHeight())
yInside = true;
if(xInside && yInside)
....
可以设置xInside和yInside为布尔表达式的值,改写代码,去掉显式的true和false值。
答:略
R6.19 给出6.3.2节的纳税程序的一组测试用例,并手工计算期望的结果。
答:略