*本文章仅供参考,习题的答案可以从www.mindviewinc.com处购买名为“The Thinking in Java Annotated Solution Guide”的电子文档中查找。
- 练习1:使用“简短的”和正常的打印语句来编写一个程序。
import static net.mindview.util.Print.*;
import java.util.Date;
public class TestSimplePrint {
public static void main(String[] args) {
print("Hello , it`s ");
print(new Date());
System.out.println("Hello , it`s " + new Date());
}
}
- 练习2:创建一个包含一个float域的类,并用这个类来展示别名机制。
class Tank { float val; } public class Alias1 { public static void main(String[] args) { Tank tank1 = new Tank(); Tank tank2 = new Tank(); tank1.val = 0.9f; tank2.val = 4.5f; System.out.println("1: tank1.val=" + tank1.val + ", tank2.val=" + tank2.val); tank2 = tank1; System.out.println("2: tank1.val=" + tank1.val + ", tank2.val=" + tank2.val); tank1.val = 40.95f; System.out.println("3: tank1.val=" + tank1.val + ", tank2.val=" + tank2.val); } }
- 练习3:创建一个包含一个float域的类,并用这个类来展示方法调用时的别名机制。
class Letter { float f; } public class Alias2 { static void f(Letter letter) { letter.f = 0.9f; } public static void main(String[] args) { Letter letter = new Letter(); letter.f = 4.5f; System.out.println("1: letter.f=" + letter.f); f(letter); System.out.println("2: letter.f=" + letter.f); } }
- 练习4:编写一个计算速度的程序,它所使用的距离和时间都是常量。
public class Velocity { public static void main(String[] args) { Random random = new Random(47); double distance, time, velocity; distance = random.nextDouble(); System.out.println("distance: " + String.format("%.2f", distance)); time = random.nextInt(10) + 1; System.out.println("time: " + String.format("%.2f", time)); velocity = distance / time; System.out.println("velocity: " + String.format("%.2f", velocity)); } }
- 练习5:创建一个名为Dog的类,它包含两个String域:name和says。在>方法中,创建两个Dog对象,一个名为spot(它的叫声为“Ruff!”),另一个名为scruffy(它的叫声为“Wuff!”)。然后显示它们的名字和叫声。
class Dog { private String name; private String says; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSays() { return says; } public void setSays(String says) { this.says = says; } } public class Dogs { public static void main(String[] args) { Dog dog1 = new Dog(); Dog dog2 = new Dog(); dog1.setName("spot"); dog1.setSays("Ruff!"); dog2.setName("scruffy"); dog2.setSays("Wurf!"); System.out.println("Dog:" + dog1.getName() + ", sound:" + dog1.getSays()); System.out.println("Dog:" + dog2.getName() + ", sound:" + dog2.getSays()); } }
- 练习6:在练习5的基础上,创建一个新的Dog索引,并对其赋值为spot对象。测试用==和equals()方法来比较所有引用的结果。
class Dog { private String name; private String says; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSays() { return says; } public void setSays(String says) { this.says = says; } } public class NewDogs { public static void main(String[] args) { Dog dog1 = new Dog(); Dog dog2 = new Dog(); Dog dog3 = new Dog(); dog1.setName("spot"); dog1.setSays("Ruff!"); dog2.setName("scruffy"); dog2.setSays("Wurf!"); dog3.setName("spot"); System.out.println("dog1 == dog3 : " + (dog1 == dog3)); System.out.println("dog1 (equals) dog3 : " + dog1.equals(dog3)); System.out.println("dog1.name == dog3.name : " + (dog1.getName() == dog3.getName())); System.out.println("dog1.name (equals) dog3.name : " + dog1.getName().equals(dog3.getName())); } }
- 练习7:编写一个程序,模拟扔硬币的结果。
import java.util.Random; public class Toss { //下一个伪随机数,从这个随机数发生器的序列中均匀分布 boolean值。true和false以(大概)相等的概率产生。 public static void main(String[] args) { Random random = new Random(47); System.out.println(random.nextBoolean() ? "Head" : "TAIL"); } }
- 练习8:展示用十六进制和八进制计数法来操作long值,用Long.toBinaryString()来显示结果。
public class LongToBinaryString { public static void main(String[] args) { Long longNum1 = 017L; //八进制 Long longNum2 = 0xFFL; //十六进制 System.out.println("017 = " + Long.toBinaryString(longNum1)); System.out.println("0xFF = " + Long.toBinaryString(longNum2)); } }
- 练习9:分別显示用float和double指数记数法所能表示的最大和最小的数字。
public class MaxMin { public static void main(String[] args) { System.out.println("Float Min_value : " + Float.MIN_VALUE); System.out.println("Float Max_value : " + Float.MAX_VALUE); System.out.println("Double Min_value : " + Double.MIN_VALUE); System.out.println("Double Max_value : " + Double.MAX_VALUE); } }
- 练习10:编写一个具有两个常量值的程序,一个具有交替的二进制位1和0,其中最低有效位为0,另一个也具有交替的二进制位1和0,但是最低有效位为1(提示:使用十六进制常量来表示是最简单的方法)。取这两个值,用按位操作符以所有可能的方式结合运算它们,然后用Integer.toBinaryString()显示。
public class EucalyptusOperators { public static void main(String[] args) { final int constant1 = 0x2A; final int constant2 = 0x15; int i = 0; System.out.println("~constant1 = " + ~constant1); System.out.println("~constant2 = " + ~constant2); System.out.println("constant1 & constant2 = " + Integer.toBinaryString(constant1 & constant2)); System.out.println("constant1 | constant2 = " + Integer.toBinaryString(constant1 | constant2)); System.out.println("constant1 ^ constant2 = " + Integer.toBinaryString(constant1 ^ constant2)); i = constant1; i &= constant2; System.out.println("i &= constant2 : " + Integer.toBinaryString(i)); i = constant1; i |= constant2; System.out.println("i |= constant2 : " + Integer.toBinaryString(i)); i = constant1; i ^= constant2; System.out.println("i ^= constant2 : " + Integer.toBinaryString(i)); } }
- 练习11:以一个最高有效位为1的二进制数字开始(提示:使用十六进制常量),用有符号右移操作符对其进行进行右移,直至所有的二进制位都被移出为止,每移一位都要使用Integer.toBinaryString()显示结果。
public class RightShift { public static void main(String[] args) { final int constant1 = 0x2A; final int constant2 = -0x2A; int i; i = constant1; System.out.println("+0 >> : " + Integer.toBinaryString(i)); System.out.println("+1 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("+2 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("+3 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("+4 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("+5 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("+6 >> : " + Integer.toBinaryString(i >>= 1)); i = constant1; System.out.println("+0 >>> : " + Integer.toBinaryString(i)); System.out.println("+1 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("+2 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("+3 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("+4 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("+5 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("+6 >>> : " + Integer.toBinaryString(i >>>= 1)); i = constant2; System.out.println("-0 >> : " + Integer.toBinaryString(i)); System.out.println("-1 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("-2 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("-3 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("-4 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("-5 >> : " + Integer.toBinaryString(i >>= 1)); System.out.println("-6 >> : " + Integer.toBinaryString(i >>= 1)); i = constant2; System.out.println("-0 >>> : " + Integer.toBinaryString(i)); System.out.println("-1 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("-2 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("-3 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("-4 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("-5 >>> : " + Integer.toBinaryString(i >>>= 1)); System.out.println("-6 >>> : " + Integer.toBinaryString(i >>>= 1)); } }
- 练习12:以一个所有位都为1的二进制数字开始,先左移它,然后用符号右移操作符对其进行右移,直至所有的二进制位都被移出为止,毎移一位都要使用Integer.toBinaryString()显示结果。
public class LeftRightShift { public static void main(String[] args) { final int constant1 = 0xF; int i = constant1; System.out.println("left shift : " + Integer.toBinaryString(i <<= 1)); System.out.println("right shift : " + Integer.toBinaryString(i >>>= 1)); System.out.println("right shift : " + Integer.toBinaryString(i >>>= 1)); System.out.println("right shift : " + Integer.toBinaryString(i >>>= 1)); System.out.println("right shift : " + Integer.toBinaryString(i >>>= 1)); System.out.println("right shift : " + Integer.toBinaryString(i >>>= 1)); } }
- 练习13:编写一个方法,它以二进制形式显示char类型的的值。使用多个不同的字符来展示它。
public class CharBinary { public String toBinary(char c) { String cString = Integer.toBinaryString(c); return cString; } public static void main(String[] args) { CharBinary charBinary = new CharBinary(); System.out.println("Q : " + charBinary.toBinary('Q')); System.out.println("q : " + charBinary.toBinary('q')); System.out.println("~ : " + charBinary.toBinary('~')); System.out.println("1 : " + charBinary.toBinary('1')); } }
- 练习14:编写一个接收两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印出来。做==和!=比较的同时,用equals()作测试。在main()里面用几个不同的字符串对象调用这个方法。
public class CompareString { public static void Compare(String str1 , String str2) { System.out.println(str1 + " & " + str2); System.out.println("str1 == str2 : " + (str1 == str2)); System.out.println("str1 != str2 : " + (str1 != str2)); System.out.println("str1.equals(str2) : " + (str1.equals(str2))); } public static void main(String[] args) { Compare("Hello", "Hello"); String string = new String("Hello"); Compare("Hello", string); Compare("Hello", "HELLO"); } }