A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目1:         * 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个 第二天早上又       
        * 将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早       
        * 上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
        * -----------------------------------------------------------------------------------------
        * 程序分析:采取逆向思维的方法,从后往前推断
        *
        * 结果正确,没投机取巧满分,不能运行0分
        *
        *    完成需求                 =4分=
        *   
        *    1   (1 + 1) * 2 = 4   (4 + 1) * 2 = 10   (10 + 1) * 2 = 22 ...
*/
public class Test1 {
        public static void main(String[] args) {
                int sum = 1;
                for (int i = 0; i < 9; i++) {
                        sum = (sum + 1) * 2;
                }
               
                System.out.println("猴子第一天摘了" + sum + "个桃子");
        }
}
题目2:
        * 请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,
        * 如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),
        * 否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果
        * 传入的数组为null,应抛出IllegalArgumentException异常。
        * -----------------------------------------------------------------------------------------
        * 在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,
        * 例如,字符不存在,字符存在,传入的数组为null等。
        *
        * 结果正确,没投机取巧满分,不能运行0分
        *
        * 可以返回已有字符出现的位置                 =1分=
        * 可以返回-1                                                =1分=
        * 能抛出异常                                                =4分=
*/
public class Test2 {
        public static void main(String[] args) {
                char[] chs = {'a', 'b', 'c', 'd', 'e', 'f'};
                char[] chs2 = null;
               
                System.out.println(getIndex(chs, 'a'));
                System.out.println(getIndex(chs, 'h'));
                System.out.println(getIndex(chs2, 'a'));
               
        }
        /*
         * 定义一个方法,用来查找字符在字符数组中出现的索引
         * 返回值类型: int
         * 参数列表: char[] chs , char ch
         */
        public static int getIndex(char[] chs , char ch){
               
                // 判断,如果chs为null 就抛异常
                if(chs == null)
                        // 在方法体内,使用throw关键字,后面跟异常对象
                        throw new IllegalArgumentException("数组为空!!!");
               
                for (int i = 0; i < chs.length; i++) {
                        if(chs[i] == ch) {
                                return i;
                        }
                }
               
                return -1;
               
        }
}

题目3:
        * 键盘录入一段字符串,要求使用map集合统计出字符串中字母和数字出现的次数,
        * 如果有其他字符则当做*号来统计,最后按指定方式输出(不要求排序)
        * 例如录入字符串:aaaabbbcccddd1112233ABC^^^
        * 输出的格式为: *(3),1(3),2(2),3(2),a(4),b(3),c(3),d(3)
        * (注意:括号前面是字符,里面是次数)
        *
        * 结果正确,没投机取巧满分,不能运行0分
        *
        * 将字符串转换成字符数组,并且遍历每一个字符                =1分=
        * 将字符和字符出现的个数存入map集合                                =5分=
                *         没有把其他字符当作*存储                                                =扣2分=
        * 可以按照正确的格式输出                                                =4分=
                *         打印结果末尾有逗号                                                        =扣1分=
*/
public class Test3 {
        public static void main(String[] args) {
                // 键盘录入
                Scanner sc = new Scanner(System.in);
               
//                String line = sc.nextLine();
                String line = "aaaabbbcccddd1112233ABC^^^";
               
                //创建一个Map集合
                HashMap<Character, Integer> hm = new HashMap<>();
                // 把字符串转换成字符数组
                char[] chs = line.toCharArray();
                // 遍历字符数组
                for (char c : chs) {
                        // 判断是否为字母或者数字
                        if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9') {
                                /*if(!hm.containsKey(c)){
                                        hm.put(c, 1);
                                }else {
                                        hm.put(c, hm.get(c) + 1);
                                }*/
                                hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);
                        }else{
                                // 无论是什么都当 *
                                /*if(!hm.containsKey("*")){
                                        hm.put('*', 1);
                                }else{
                                        hm.put('*', hm.get('*') + 1);
                                }*/
                                hm.put('*', !hm.containsKey('*') ? 1 : hm.get('*') + 1);
                        }
                }
               
                String str = map2String(hm);
               
                System.out.println(str);
        }

        private static String map2String(HashMap<Character, Integer> hm) {
                // 创建字符串缓冲区
                StringBuilder sb = new StringBuilder();
                // 遍历Map集合  通过键获取值的方式
                // 输出的格式为: *(3),1(3),2(2),3(2),a(4),b(3),c(3),d(3)
                for(Character key : hm.keySet()){
                        Integer value = hm.get(key);
                        sb.append(key).append("(").append(value).append("),");
                }
                return sb.substring(0, sb.length() - 1);
        }
}

--题目4:
        * 已知User类,该类有name(String类型)和age(int类型)两个属性,
        * 请编写代码实现ArrayList<User>排序,
        * 要求按照User对象的age的倒序排序。
        *
        * 结果正确,没投机取巧满分,不能运行0分
        *
        * 创建完整的User类                                        =3分=
        * 创建几个User的实例存入ArrayList        =1分=
        * 可以按年龄倒序排序                                =6分=
                *         实现排序,但是是正序                                =扣3分=
*/
public class Test4 {
        public static void main(String[] args) {
                ArrayList<User> al = new ArrayList<>();
                al.add(new User("希尔瓦纳斯", 18));
                al.add(new User("希尔瓦纳斯", 19));
                al.add(new User("希尔瓦纳斯", 30));
                al.add(new User("奥雷莉亚", 20));
                al.add(new User("伊利丹", 17));
                al.add(new User("古尔丹", 25));
                al.add(new User("污妖王", 23));
               
                //创建一个排序方法
//                System.out.println(al);
//                sort(al);
//                Collections.sort(al);
                Collections.sort(al , new Comparator<User>() {

                        @Override
                        public int compare(User o1, User o2) {
                                int num = o1.getName().compareTo(o2.getName());
                                return num == 0 ? o1.getAge() - o2.getAge() : num;
                        }
                });
                System.out.println(al);
        }

        private static void sort(ArrayList<User> al) {
                // 选择排序
                for (int i = 0; i < al.size() - 1; i++) {
                        for (int j = i + 1; j < al.size(); j++) {
                                if(al.get(i).getAge() < al.get(j).getAge()){
                                        User temp = al.get(i);
                                        al.set(i, al.get(j));
                                        al.set(j, temp);
                                }
                        }
                }
        }
}

当然,每道题可能也有不同的解法,欢迎大家踊跃探讨并给出思路(*^__^*) 嘻嘻……

2 个回复

倒序浏览
无人看么?  - -,过几天就要点招了。。。各位加油吧
回复 使用道具 举报
学习学习,谢谢楼主分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马