Thinking in Java 习题 - 第四章
9月 13, 2013
练习1 #
/*写一个程序,打印从1到100的值*/
class Main {
public static void main (String args[]){
for (int i=1;i<101;i++){
System.out.println(i);
}
}
}
练习2 #
/*写一个程序,产生25个随机数。对于每一个随机值,使用if-else语句来将其分类为大于,小于,或等于紧随它而随机生成的值*/
import java.util.*;
class Main {
static Random r = new Random();
public static void compare(){
int a = r.nextInt(20);
int b = r.nextInt(20);
System.out.println("a="+a+";b="+b);
if (a<b)
System.out.println("a<b");
else if (a>b)
System.out.println("a>b");
else
System.out.println("a=b");
System.out.println();
}
public static void main (String args[]){
for (int i=0;i<25;i++){
compare();
}
}
}/*Output:
a=13;b=6
a>b
a=12;b=12
a=b
a=16;b=17
a<b
a=7;b=15
a<b
a=10;b=5
a>b
a=1;b=18
a<b
a=4;b=2
a>b
a=3;b=3
a=b
a=10;b=1
a>b
a=7;b=3
a>b
a=13;b=6
a>b
a=11;b=13
a<b
a=17;b=11
a>b
a=16;b=17
a<b
a=16;b=10
a>b
a=6;b=13
a<b
a=9;b=2
a>b
a=13;b=12
a>b
a=17;b=3
a>b
a=11;b=15
a<b
a=8;b=8
a=b
a=14;b=1
a>b
a=18;b=2
a>b
a=9;b=7
a>b
a=8;b=0
a>b
*/
练习3 #
import java.util.Random;
/*修改练习2,把代码用一个while无限循环包括起来。然后运行它直至用键盘中断其运行(通常通过按CTRL-C)。*/
class Main {
public static void compare(){
Random r = new Random();
int a = r.nextInt(20);
int b = r.nextInt(20);
System.out.println("s="+a+";b="+b);
if (a<b)
System.out.println("a<b");
else if (a>b)
System.out.println("a>b");
else
System.out.println("a=b");
System.out.println();
}
public static void main (String args[]){
while (true){
compare();
}
}
}){
compare();
}
}
}
练习4 #
/*写一个程序,使用两个嵌套的for循环和取余操作符(%)来探测和打印素数(只能被其自身和1整除,而不能被其他数字整除的整数)*/
class Main {
public static void main(String args[]){
int i,j;
for (i=2;i>0;i++){
boolean a = true;
for (j=2;j<i;j++){
if (i%j==0)
a = false;
}
if (a==true)
System.out.println(i);
}
}
}
练习5 #
/*重复第3章中的练习10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符来显示二进制的1和0*/
待解决!!
练习6 #
/*修改前两个程序中的两个text()方法,让它们接受两个额外的参数begin和end,这样在测试testval时将判断它是否在begin和end中间
* (包括begin和end)的范围内。*/
class Main {
public static boolean test(int testval,int begin,int end){
boolean result = false;
if (testval>=begin&&testval<=end)
result = true;
return result;
}
public static void main (String args[]){
System.out.println(test(5,10,15));
System.out.println(test(10,5,15));
System.out.println(test(15,5,10));
}
}/*Output;
false
true
false
*/
练习7 #
/*修改本章练习1,通过使用break关键词,使得程序在打印到99时退出。然后尝试使用return来达到相同的目的。*/
class Main {
public static void main (String args[]){
for (int i=1;i<101;i++){
System.out.println(i);
if (i==99)
break;
}
}
}
练习8 #
/*写一个switch开关语句,为每个case打印一个消息。然后把这个switch放进for循环来测试每个case。先让每个case后面都有break,
* 测试一下会怎样,然后把break删了,看看会怎样。*/
import static net.mindview.util.Print.*;
class Main {
public static void main (String args[]){
for (int i=1;i<7;i++){
switch (i){
case 1:print("case1");break;
case 2:print("case2");break;
case 3:print("case3");break;
case 4:print("case4");break;
case 5:print("case5");break;
default:print("default");
}
}
}
}/*Output:
case1
case2
case3
case4
case5
default
*/
练习9 #
/*一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起,都是前两个数字的和)。
* 创建一个方法,接受一个整数参数,并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。例如:
* 如果运行java Fibonacci 5(其中Fibonacci是类名),那么输出就应该是1、1、2、3、5.*/
class Main {
static int fib(int n){
if (n<2)
return 1;
return fib(n-1)+fib(n-2);
}
public static void main (String args[]){
int n = Integer.parseInt(args[0]); //!
if (n<0){
System.out.println("wrong num!");
return;
}
for (int i= 1;i<=n;i++){
System.out.println(fib(n)+",");
}
}
}
练习10 #
/*吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。
* 以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼数字”:
* 1260=21*60
* 1827=21*87
* 2187=27*81
* 写一个程序,找出4位数的所有吸血鬼数字(Dan Forhan推荐)。*/
待解决!!
第四章完结。