Java编程思想第四版第四章练习

我正在读C++prime第六版,然后正好学到这个章节,简直太一致了吧。
闲话少说,直接上题。PS:编译器如期而至IDEA,熟悉了好久的编译系统,安装教程请看上一篇博客。
1.写一个程序,打印从1到100的值。

import java.util.*;
public class Main {
    public static void main(String[] args) {
       for(int i=1;i<101;i++){
           System.out.println(i);
       }
    }
}

output:略

2.写一个程序,产生25个int类型的随机数,对于每一个随机数,使用if-else语句来将其分类为大于、小于,或等于紧随它而随机产生的值。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Random rad=new Random();
       for(int i=1;i<25;i++){
           int a=rad.nextInt();
           for(int j=i;j<26;j++){
                int b=rad.nextInt();
                if(a==b){
                    System.out.println("a==next"+a);
                }
                else if(a<b){
                    System.out.println("a<next"+a);
                }
                else{
                    System.out.println("a>next"+a);
                }
           }
       }
    }
}

output:略
3.修改练习2,把代码用一个while无限循环包括起来。然后运行它直至用键盘中断其运行(通常是通过按Ctrl+c)。

import java.util.*;
public class Main {
    public static void main(String[] args) {
       while(true){
            Random rad = new Random();
            for (int i = 1; i < 25; i++) {
                int a = rad.nextInt();
                for (int j = i; j < 26; j++) {
                    int b = rad.nextInt();
                    if (a == b) {
                        System.out.println("a==next" + a);
                    } else if (a < b) {
                        System.out.println("a<next" + a);
                    } else {
                        System.out.println("a>next" + a);
                    }
                }
            }
        }
    }
}

output:略
PS:死循环别按ctrl + C 了 不管用 那是CMD时候才有用,点一下中断就好了
IDEA快捷键CTRL+F2
4.写一个程序,使用两个嵌套的for循环和取余操作符(%)来探测和打印素数(只能被其自身和1整除,而不能被其它数字整除的整数)。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        for (int i = 1; i < 100; i++) {
            if (i == 1) {
                System.out.println(i);
                continue;
            } else {
                for (int k = i - 1; k > 0; k--) {
                    if (k == 1) {
                        System.out.println(i);
                    } else {
                        if (i % k == 0) {
                            break;
                        } else {
                            continue;
                        }
                    }
                }
            }
        }
    }
}


output:1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

5.重复第3章中的练习10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符来显示二进制的1和0。

import java.util.*;
public class Main {
    public static void changez(int i) {
        char[] b = new char[32];
        int c = 32;
        do {
            b[--c] = ((i & 0X01) == 0) ? '0':'1';
            i>>>=1;
        }while(i!=0);
        for (int j = 0; j < b.length; j++) {
            System.out.print(b[j]);
        }
        System.out.println();
    }
    public static void main(String[] args) {
        int x = 0Xaaaaaaaa;
        int y = 0x55555555;
        System.out.print("x = ");changez(x);
        System.out.print("y = ");changez(y);
        System.out.print("x =  ");changez(~x);
        System.out.print("y = ");changez(~y);
        System.out.print("x&x = ");changez(x&x);
        System.out.print("x|x =  ");changez(x|x);
        System.out.print("x^x =  ");changez(x^x);
        System.out.print("x&y =  ");changez(x&y);
        System.out.print("x|y =  ");changez(x|y);
        System.out.print("x^y =  ");changez(x^y);
    }
}


output:
i1 = 10101010101010101010101010101010
i2 = 1010101010101010101010101010101
~i1 = 1010101010101010101010101010101
~i2 = 10101010101010101010101010101010
i1&i1 = 10101010101010101010101010101010
i1|i1 = 10101010101010101010101010101010
i1^i1 = 0
i1&i2 = 0
i1|i2 = 11111111111111111111111111111111
i1^i2 = 11111111111111111111111111111111
6.修改前两个程序中的两个test()方法,让他们接受两个额外的参数begin和end,这样在测试testval时将判断它是否在begin和end之间(包含begin和end)的范围内。

import java.util.*;
public class Main {
       static int test(int testval,int target,int begin,int end) {
            if(testval<end&&testval>begin){
                if(testval>target){
                    return +1;
                }
                else if(testval<target){
                    return -1;
                }
                else{
                    return 0;
                }
            }
            else{
                return -2;
            }
       }
    public static void main(String[] args) {
        System.out.print(test(1,2,3,4));
    }
}


有个事情十分有趣如图:
在这里插入图片描述
IDEA自动帮我标注了什么参数,好贴心~
7.修改本章练习1,通过使用break关键词,使得程序在打印99时退出。然后尝试使用return来达到相同的目的。
break:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        for(int i=1;i<101;i++){
            if(i==100){
                break;
            }
            System.out.println(i);
        }
    }
}

return:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        for(int i=1;i<101;i++){
            if(i==100){
                return;
            }
            System.out.println(i);
        }
    }
}

8.写一个switch开关语句,为每个case打印一条消息。然后把这个switch放进for循环来测试每个case。先让每个case后面都有break,测试一下会怎样,然后把break删了,看看会怎样。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        for(int i=0;i<4;i++){
            switch (i){
                case 0:
                    System.out.println("aaaa");
                    break;
                case 1:
                    System.out.println("bbbb");
                   // break;
                case 2:
                    System.out.println("cccc");
                    //break;
                case 3:
                    System.out.println("dddd");
                    break;
                case 4:
                    System.out.println("eeee");
                    break;
                default:
                    System.out.println("default");
            }
        }
    }
}

output:略

9.一个斐波那契数列由数字1、1、2、3、5、8、13、21、34等等组成的,其中每个数字(第三个数字起)都是前两个数字的之和。创建一个方法,接受一个整数参数,并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。

import java.util.*;
public class Main {
    public static void main(String[] args) {
       int n=10;
       int a[]=new int[n];
        for(int i=0;i<n;i++){
            if(i==0){
                a[i]=1;
                System.out.println(1);
            }
            else if(i==1){
                a[i]=1;
                System.out.println(1);
            }
            else {
                a[i]=a[i-1]+a[i-2];
                System.out.println(a[i]);
            }
        }
    }
}

算法题,详见我另一个博客。
10.吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字包含乘积一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字就是“吸血鬼”数字:
1260 = 2160
1827 = 21
87
2187 = 27*81
写一个程序,找出4位数的所有吸血鬼数字。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        int x = 1000;
        int tema=x;
        int w = 0;
        do {
            w++;
            tema /= 10;
        } while (tema != 0);
        if (w % 2 == 0) {
            w/=2;
            int a = (int) Math.pow(10, (w - 1));
            for (int i = a; i < Math.pow(10, w) - 1; i++) {
                for (int j = i; j < Math.pow(10, w); j++) {
                    if (i * j == x) {
                        System.out.println(i + " " + j);
                    }
                }
            }
        }else {
            return;
        }
    }
}

output:
20 50
25 40
算法题。
这里有一个由用户体验的完整版:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        int tema=x;
        int w = 0;
        do {
            w++;
            tema /= 10;
        } while (tema != 0);
        if (w % 2 == 0) {
            w/=2;
            int a = (int) Math.pow(10, (w - 1));
            for (int i = a; i < Math.pow(10, w) - 1; i++) {
                for (int j = i; j < Math.pow(10, w); j++) {
                    if (i * j == x) {
                        System.out.println(i + "*" + j);
                    }
                }
            }
        }else {
            System.out.println("没有匹配项!");
            return;
        }
    }
}

结束~
我的另一个博客:https://www.cnblogs.com/hsjj/
会不定时的更新算法题
有问题欢迎发送邮件至hpzhangjunjiell@163.com
我们下次见哦~

写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 1.6.2 抽象的基础类和接口 1.7 对象的创建和存在时间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的回报 1.13 Java还是C++? 第2章 一切都是对象 2.1 用句柄操纵对象 2.2 必须创建所有对象 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结 2.11 练习 第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14 Java没有“sizeof” 3.1.15 复习计算顺序 3.1.16 运算符总结 3.2 执行控制 3.2.1 真和假 3.2.3 反复 3.2.6 中断和继续 3.2.7 切换 3.3 总结 3.4 练习 第4章 初始化和清除 4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 成员初始化 4.4.1 规定初始化 4.4.2 构建器初始化 4.5 数组初始化 4.5.1 多维数组 4.6 总结 4.7 练习 第5章 隐藏实施过程 5.1 包:库单元 5.1.1 创建独一无二的包名 5.1.2 自定义工具库 5.1.3 利用导入改变行为 5.1.4 包的停用 5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 6.4 到底选择合成还是继承 6.6 递增开发 6.7 上溯造型 6.7.1 何谓“上溯造型”? 6.8 final关键字 6.8.1 final数据 6.8.2 final方法 6.8.3 final类 6.8.4 final的注意事项 6.9 初始化和类装载 6.9.1 继承初始化 6.10 总结 6.11 练习 第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值