第三章练习题(Chapter3)

*本文章仅供参考,习题的答案可以从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域:namesays。在>方法中,创建两个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:分別显示用floatdouble指数记数法所能表示的最大和最小的数字。
  • 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");
        }
    }

    猜你喜欢

    转载自blog.csdn.net/sinat_32469267/article/details/79340779