Thinking in Java 第四版完整版 第三章练习题,记录一下(jdk1.8.0)
1.
import java.util.*;
//import static net.mindview.util.Print.*;
/**
* 练习1:使用“简短的”和正常的打印语句来编写一个程序。
* @author admin11
* @date 2018年2月27日
*/
public class Exercise301 {
public static void main(String[] args) {
System.out.println("Hello, it's:");
System.out.println(new Date());
//print("Hello, it's:");
//print(new Date());
}
}
2.
/**
* 练习2:创建一个包含一个float域的类,并用这个类来展示别名机制。
* @author admin11
* @date 2018年2月28日
*/
class TestFloat {
float f;
}
public class Exercise302 {
public static void main(String[] args) {
TestFloat tf1 = new TestFloat();
TestFloat tf2 = new TestFloat();
tf1.f = 2.3f;
tf2.f = 2.6f;
System.out.println("1: tf1.f = " + tf1.f + ", tf2.f = " + tf2.f);
tf1 = tf2;
System.out.println("2: tf1.f = " + tf1.f + ", tf2.f = " + tf2.f);
tf1.f = 2.8f;
System.out.println("3: tf1.f = " + tf1.f + ", tf2.f = " + tf2.f);
}
}
3.
/**
* 练习3:创建一个包含一个float域的类,并用这个类来展示方法调用时的别名机制。
* @author admin11
* @date 2018年2月28日
*/
class TestMethod {
float f;
}
public class Exercise303 {
public static void changeValue(TestMethod tm) {
tm.f = 2.1f;
}
public static void main(String[] args) {
TestMethod m = new TestMethod();
m.f = 1.7f;
System.out.println("1: m.f: " + m.f);
changeValue(m);
System.out.println("2: m.f: " + m.f);
}
}
4.
/**
* 练习4:编写一个计算速度的程序,它所使用的距离和时间都是常量。
* @author admin11
* @date 2018年2月28日
*/
public class Exercise304 {
public static void main(String[] args) {
if(args.length < 2) {
System.out.println("输入格式: java 类名 距离 时间");
System.exit(1);
}
float distance = Float.parseFloat(args[0]);
float time = Float.parseFloat(args[1]);
System.out.println("Velocity = " + distance/time + " m/s");
}
}
5.
/**
* 练习5:创建一个名为Dog的类,它包含两个String域:name和says。在main()方法中,
* 创建两个Dog对象,一个名为spot(它的叫声为“Ruff!”),另一个名为scruffy(它的叫声为“Wurf!”)。
* 然后显示它们的名字和叫声。
* @author admin11
* @date 2018年2月28日
*/
class Dog {
String name;
String says;
}
public class Exercise305 {
public static void main(String[] args) {
Dog dog1 = new Dog();
Dog dog2 = new Dog();
dog1.name = "spot";
dog1.says = "Ruff!";
dog2.name = "scruffy";
dog2.says = "Wurf!";
System.out.println("dog1.name: " + dog1.name +" , dog1.says: " + dog1.says);
System.out.println("dog2.name: " + dog2.name +" , dog2.says: " + dog2.says);
}
}
6.
/**
* 练习6:在练习5的基础上,创建一个新的Dog索引,并对其赋值为spot对象。
* 测试用==和equals()方法来比较所有引用的结果。
* @author admin11
* @date 2018年2月28日
*/
class Dog2 {
String name;
String says;
}
public class Exercise306 {
public static void conpareDog(Dog2 dog1, Dog2 dog2) {
System.out.println(dog1 == dog2);
System.out.println(dog1.equals(dog2));
System.out.println(dog1.name == dog2.name);
System.out.println(dog1.name.equals(dog2.name));
System.out.println(dog1.says == dog2.says);
System.out.println(dog1.says.equals(dog2.says));
}
public static void main(String[] args) {
Dog2 dog1 = new Dog2();
dog1.name = "spot";
dog1.says = "Ruff!";
Dog2 dog2 = new Dog2();
dog2.name = "scruffy";
dog2.says = "Wurf!";
Dog2 dog3 = dog1;
System.out.println("compare dog1 dog2:");
conpareDog(dog1,dog2);
System.out.println("compare dog1 dog3:");
conpareDog(dog1,dog3);
System.out.println("compare dog2 dog3:");
conpareDog(dog2,dog3);
}
}
7.
import java.util.Random;
/**
* 练习7:编写一个程序,模拟扔硬币的结果。
* @author admin11
* @date 2018年2月28日
*/
public class Exercise307 {
public static void main(String[] args) {
Random random = new Random();
boolean flag = random.nextBoolean();
System.out.println(flag ? "正" : "反");
}
}
8.
/**
* 练习8:展示用十六进制和八进制计数法来操作long值,用Long.toBinaryString()来显示结果。
* @author admin11
* @date 2018年2月28日
*/
public class Exercise308 {
public static void main(String[] args) {
long l1 = 0x2f;
System.out.println("l1: " + Long.toBinaryString(l1));
long l2 = 0x2F;
System.out.println("l2: " + Long.toBinaryString(l2));
long l3 = 0177;
System.out.println("l3: " + Long.toBinaryString(l3));
}
}
9.
/**
* 练习9:分别显示用float和double指数记数法所能表示的最大和最小的数字。
* @author admin11
* @date 2018年2月28日
*/
public class Exercise309 {
public static void main(String[] args) {
System.out.println("float最大数字:" + Float.MAX_VALUE);
System.out.println("float最小数字:" + Float.MIN_VALUE);
System.out.println("double最大数字:" + Double.MAX_VALUE);
System.out.println("double最小数字:" + Double.MIN_VALUE);
}
}
10.
/**
* 练习10:编写一个具有两个常量值的程序,一个具有交替的二进制位1和0,其中最低有效位为0,另一个也具有交替
* 的二进制位1和0,但是其最低有效位为1(提示:使用十六进制常量来表示是最简单的方法)。取这两个值,用按位
* 操作符以所有可能的方式结合运算它们,然后用Integer.toBinaryString()显示。
* @author admin11
* @date 2018年2月28日
*/
public class Exercise310 {
public static void main(String[] args) {
int i1 = 0xaaaaaaaa;
int i2 = 0x55555555;
System.out.println("i1 = " + Integer.toBinaryString(i1));
System.out.println("i2 = " + Integer.toBinaryString(i2));
System.out.println("~i1 = " + Integer.toBinaryString(~i1));
System.out.println("~i2 = " + Integer.toBinaryString(~i2));
System.out.println("i1 & i2 = " + Integer.toBinaryString(i1 & i2));
System.out.println("i1 | i2 = " + Integer.toBinaryString(i1 | i2));
System.out.println("i1 ^ i2 = " + Integer.toBinaryString(i1 ^ i2));
System.out.println("i1 & i1 = " + Integer.toBinaryString(i1 & i1));
System.out.println("i1 | i1 = " + Integer.toBinaryString(i1 | i1));
System.out.println("i1 ^ i1 = " + Integer.toBinaryString(i1 ^ i1));
System.out.println("i2 & i2 = " + Integer.toBinaryString(i2 & i2));
System.out.println("i2 | i2 = " + Integer.toBinaryString(i2 | i2));
System.out.println("i2 ^ i2 = " + Integer.toBinaryString(i2 ^ i2));
}
}
11.
/**
* 练习11:以一个最高有效位为1的二进制数字开始(提示:使用十六进制常量),用有符号右移操作符对其进行右移,
* 直至所有的二进制位都被移出为止,每移一位都要使用Integer.toBinaryString()显示结果。
* @author admin11
* @date 2018年3月1日
*/
public class Exercise311 {
public static void main(String[] args) {
int i = 0x80000000;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>1;
System.out.println(Integer.toBinaryString(i));
i = i>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
i = i >> 1;
System.out.println(Integer.toBinaryString(i));
}
}
12.
/**
* 练习12:以一个所有位都为1的二进制数字开始,先左移它,然后用无符号右移操作符对其进行右移,直至所有的二进制
* 位都被移出为止,每移一位都要使用Integer.toBinaryString()显示结果。
* @author admin11
* @date 2018年3月1日
*/
public class Exercise312 {
public static void main(String[] args) {
int i = -1;
System.out.println(Integer.toBinaryString(i));
i = i << 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
i = i >>> 1;
System.out.println(Integer.toBinaryString(i));
}
}
13.
/**
* 练习13:编写一个方法,它以二进制形式显示char类型的值。使用多个不同的字符来展示它。
* @author admin11
* @date 2018年3月1日
*/
public class Exercise313 {
public static void charToBinary(char c) {
System.out.println(c + ":" + Integer.toBinaryString(c));
}
public static void main(String[] args) {
charToBinary('A');
charToBinary('b');
charToBinary('!');
charToBinary('5');
}
}
14.
/**
* 练习14:编写一个接收两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印出来。
* 做==和!=比较的同时,用equals()做测试。在main()里面用几个不同的字符串对象调用这个方法。
* @author admin11
* @date 2018年3月1日
*/
public class Exercise314 {
public static void compareString(String s1, String s2) {
System.out.println(s1 + "==" + s2 + ": " + (s1 == s2));
System.out.println(s1 + "!=" + s2 + ": " + (s1 != s2));
System.out.println(s1 + ".equals(" + s2 + "): " +(s1.equals(s2)));
}
public static void main(String[] args) {
compareString("hello", "hello");
compareString("hello", "");
compareString("hello", "hi");
}
}