Java编程思想第4版第三章习题

这篇博客主要展示了Java编程思想第四版第三章的习题解答,涉及类、域、方法调用、数值计算、字符串比较以及位操作等概念。通过实例代码解释了如何创建float域的类、计算速度、比较引用以及模拟掷硬币等操作。同时,博主分享了在解决部分题目时遇到的疑惑和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为我是从C++转来的,所以学起来比较容易,闲话少说直接上题。

PS:编译器eclipse,正在安装IDEA,安装成功的话后面用这个编译器写

1.使用简短的和正常的打印语句来编写一个程序:

PS:这个代码包我没下载,自然这道题写不了,也无所谓这个包没啥用。

2.创建一个包含float域的类,并用这个类展示别名机制。

首先,我们要明白域是一种属性,可以是一个类变量,一个对象变量,一个对象方法变量或者是一个函数的参数。

import java.util.*;
public class TEST {
	static class A{
		float i;
	}
	public static void main(String[] args) {
		A a=new A();
		A b=new A();
		a.i=1;
		b.i=2;
		System.out.print(a.i+" "+b.i+'\n');
		a=b;
		System.out.print(a.i+" "+b.i);
	}

}

output:

1.0 2.0
2.0 2.0

3.创建一个包含一个float域的类,并用这个类展示方法调用时的别命


import java.util.*;
class A{
	float i;
}
public class TEST {                           
                                
	public static class B{                               //不写static会报错
		static void f(A a) {    //The method f cannot be declared static;
			a.i=2.10f;  // static methods can only be declared in 
		}                    //a static or top level type
	}
	public static void main(String[] args) {
		A b=new A();
		b.i=3.10f;
		System.out.print(b.i+" ");
		B.f(b);
		System.out.print(b.i);
	}

}

output:3.1 2.1

4.编写一个计算速度的程序,它所使用的距离和时间都是常量。

import java.util.*;
public class TEST {

	public static void main(String[] args) {
		final float time=10;
		final float meter=5;
		System.out.print(meter/time);
	}

}

output:0.5

5.创建一个名为Dog的类,它包含两个String域:name和says。在main()方法中,创建两个Dog对象,一个名为spot(它的叫声为“Ruff!”),另一个名为scruffy(它的叫声为“Wuff!”)。然后显示它们的名字和叫声。


import java.util.*;
public class TEST {
	public static class Dog{
		String name;
		String says;
	}
	public static void main(String[] args) {
		Dog a=new Dog();
		Dog b=new Dog();
		a.name="spot";
		a.says="Ruff!";
		b.name="scruffy";
		b.says="Wurf!";
		System.out.print(a.name+" "+a.says+'\n');
		System.out.print(b.name+" "+b.says);
	}
}

output:

spot Ruff!
scruffy Wurf!

6.在5题的基础上,创建一个新的Dog索引,并为其赋值为spot对象。测试用==和equals()方法来比较所有引用的结果


import java.util.*;
public class TEST {
	public static class Dog{
		String name;
		String says;
	}
	public static void main(String[] args) {
		Dog a=new Dog();
		Dog b=new Dog();
		a.name="spot";
		a.says="Ruff!";
		b.name="scruffy";
		b.says="Wurf!";
		Dog c=a;
		System.out.print(a.name+" "+a.says+'\n');
		System.out.print(b.name+" "+b.says+'\n');
		System.out.print(c.name==a.name+" "+(c.name).equals(a.name));
	}
}

或者


import java.util.*;
public class TEST {
	public static class Dog{
		String name;
		String says;
	}
	public static void main(String[] args) {
		Dog a=new Dog();
		Dog b=new Dog();
		a.name="spot";
		a.says="Ruff!";
		b.name="scruffy";
		b.says="Wurf!";
		Dog c=new Dog();
		c.name=a.name;
		System.out.print(a.name+" "+a.says+'\n');
		System.out.print(b.name+" "+b.says+'\n');
		System.out.print(c.name==a.name+" "+(c.name).equals(a.name));
	}
}

output:

spot Ruff!
scruffy Wurf!
false

就很迷,为啥都是false

到了17章再说吧

7.编写一个程序,模拟编写扔硬币的结果。


import java.util.*;
public class TEST {
	public static void main(String[] args) {
		Random rand=new Random();
		int a=rand.nextInt();
		int b=a%2;
		if(b==0) {
			System.out.print("正面");
		}
		else {
			System.out.print("反面");
		}
	}
}

output:

不是正面就是反面 看命

8. 展示用16进制和8进制计数法来操作long值,用Long.toBinaryString()来显示结果。

import java.util.*;
public class TEST {
	public static void main(String[] args) {
		long a=0x1f;
		System.out.print(Long.toBinaryString(a)+'\n');
		a=0177;
		System.out.print(Long.toBinaryString(a));
	}
}

output:

11111
1111111

9.分别显示用float和double指数计数法所能表示的最大和最小的数字。


import java.util.*;
public class TEST {
	public static void main(String[] args) {
		float a = Float.MAX_VALUE;
		float b = Float.MIN_VALUE;
		double c = Double.MAX_VALUE;
		double d = Double.MIN_VALUE;
		
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
	}
}

output:

3.4028235E38
1.4E-45
1.7976931348623157E308
4.9E-324
就很神奇,我也是查资料才知道的

10.编写一个具有两个常量值的程序,一个具有交替的二进制位1和0,其中最低有效位为0,另一个也具有交替的二进制位1和0,但其最低有效位为1(提示:使用十六进制常量来表示最简单的方法)。取两个值,用按位操作符以所有可能方式结合运算它们,然后用Integer.toBinaryString()显示。


import java.util.*;
public class TEST {
	public static void main(String[] args) {
		int a = 0xaaaaa;     	
		int b = 0x55555;     	
		System.out.println(Integer.toBinaryString(a));    
		System.out.println(Integer.toBinaryString(b));
	
	}
}

output:

10101010101010101010
1010101010101010101
老实说,10.11.12.13的思路我是搜来琢磨的,天知道这是什么东西...

11.以一个最高有效位为1的二进制数字开始(提示:使用十六进制常量),用有符号右移操作符对其进行右移,直至所有的二进制位都被移出为止,每移一位都要使用Integer.toBinaryString()显示结果。


import java.util.*;
public class TEST {
	public static void main(String[] args) {
		for(int i=0;i<9;i++)
		{
		int a=0x9f;
		System.out.println("i="+i+" a>>"+i+"="+Integer.toBinaryString(a>>i));
		}
	}
}

output:

i=0 a>>0=10011111
i=1 a>>1=1001111
i=2 a>>2=100111
i=3 a>>3=10011
i=4 a>>4=1001
i=5 a>>5=100
i=6 a>>6=10
i=7 a>>7=1
i=8 a>>8=0

12.以一个所有位为1的二进制数字开始,先左移它,然后用无符号右移操作符对其进行右移,直至所有的二进制位都被移出为止,每移一位都要使用Integer.toBinaryString()显示结果。


import java.util.*;
public class TEST {
	public static void main(String[] args) {
		int a=0xfff;
		System.out.println("a="+Integer.toBinaryString(a));
		System.out.println("a<<1="+Integer.toBinaryString(a<<1));
		for(int i=0;i<9;i++)
		{
			System.out.println("i="+i+" a>>>"+i+"="+Integer.toBinaryString(a>>>i));
		}
		
	}
}

output:

a=111111111111
a<<1=1111111111110
i=0 a>>>0=111111111111
i=1 a>>>1=11111111111
i=2 a>>>2=1111111111
i=3 a>>>3=111111111
i=4 a>>>4=11111111
i=5 a>>>5=1111111
i=6 a>>>6=111111
i=7 a>>>7=11111
i=8 a>>>8=1111

13.编写一个方法,它以二进制形式显示char类型的值。使用多个不同的字符来展示它。


import java.util.*;
public class TEST {
	static void f(char s) {
        System.out.println(s+": "+Integer.toBinaryString(s));
    }
	public static void main(String[] args) {
		 f('A');
		 f('B');
		 f('C');
	}
}

output:

A: 1000001
B: 1000010
C: 1000011

14.编写一个接收两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印出来。做==和!=的同时,用equals()作测试。在main()里面用几个不同的字符串对象调用这个方法。


import java.util.*;
public class TEST {
	static void compare(String a,String b) {
        System.out.println(a==b+'\n');
        System.out.println(a!=b+'\n');
        System.out.println(a.equals(b));
    }
	public static void main(String[] args) {
		 String a="aaaaa";
		 String b="bbbbb";
		 String c="ccccc";
		 compare(a,b);
		 compare(a,c);
	}
}

output:

false
true
false
false
true
false

没了~我会持续更新哦!

关于算法欢迎访问我的另一个博客:https://www.cnblogs.com/hsjj/,也会持续更新的

有问题欢迎发送邮件至hpzhangjunjiell@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值