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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贺小梅 中级黑马   /  2015-11-26 00:35  /  434 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    今天是来到黑马的第十五天,昨天因为事情耽误了发每日练习题了,实在不好意思,今天继续吧。生活依旧还是老样子,每天都是在和一堆代码打交道,总有一种感觉,自己书看得少的话就会感觉别人肯定又学了很多东西。这个现象貌似被很多程序员先生都有。突然感觉现在有点找不准重点的地方是什么了。教学视频也看了,课本上的练习题也做了,每天上课也认真听,现在就是找不到重点是什么。现在的想法就是通过练习题目来回顾知识点,在实践中将知识的基础打牢。
好吧,每天应该做的事情还是要做,每天两道题,话不多说,前几天看过的视频有一个Math类的random方法,用来产生随机数。它返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。所以,今天就来一个使用random方法的题目如下:
第一题:
用Math.random生成1,2,3,4,5,6,7,8,9,10


分析:
1、产生的随机数中没有出现重复的数值,故可以想到使用集合来存储产生的随机数
2、在集合中,不能存储重复数值的集合是Set集合
3、输出打印结果

代码如下:
import java.util.TreeSet;
//用Math.random生成1,2,3,4,5,6,7,8,9,10
public class Example01 {
        public static void main(String[] args) {
                TreeSet<Integer> ts = new TreeSet<Integer>();  //创建TreeSet集合的对象,用来存储产生的随机数
                // Random rd = new Random();

                while (ts.size() < 10) {                        //判断集合的长度
                        ts.add((int) (Math.random() * 10 + 1));
                }
                System.out.println(ts);                                //输出打印结果
        }
}

这道题的难度不大,只要认真思考都是可以做出来的,你是不是这样想的呢?可能你比我想的和做的更好吧。通过这道题是不是对Math.random()方法的使用是不是有了更深层次的了解和使用了呢?继续加油吧,骚年们!!!好吧,开始下一题:



第二题:
取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
好吧, 我承认我的智商低,这个题想了很久,最后还是没有完全做出来,后来翻阅书籍,查资料,终于还是把这道题做出来了,下面开始我们愉快的思考吧。
分析:
1、输入的是一串字符串,所以我考虑使用字符数组或者是集合来解决这道题,因为要记录某个字符在该字符串中出现的次数,可以考虑使用map集合,当出现相同的时候,就在Map的值中+1即可。
2、将字符串转换成字符数组,遍历字符数组,分别获取键和值,然后判断value是否为空,如果值为空,则向集合中添加(key,1),如果不为空则添加(key,value+1)。
3、使用迭代器来遍历Map集合,同时按照题目规定的格式来输出结果。

代码如下:

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

/*
* 7、 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
*/
public class ExamTest7 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串:");
                String str = sc.nextLine();
                char[] ch = str.toCharArray();// 转换成字符数组
                TreeMap<Character, Integer> map = new TreeMap<>();// 创建一个TreeMap
                for (char c : ch) {// 遍历
                        Character key = c;
                        Integer value = map.get(c);
                        if (value == null) {// 判断,如果值为空,则向集合中添加(key,1),如果不为空则添加(key,value+1)
                                map.put(key, 1);
                        } else {
                                map.put(key, value + 1);
                        }
                }
                // 遍历集合
                Set<Map.Entry<Character, Integer>> set = map.entrySet();
                Iterator<Entry<Character, Integer>> it = set.iterator();
                while (it.hasNext()) {
                Map.Entry<Character, Integer> me = it.next();
                Character key = me.getKey();
                Integer value = me.getValue();
                System.out.println(key + "(" + value + ")");// 按规定的格式输出
                }
        }

}
运行程序,在控制台中输入如下字符串:
请输入一个字符串:
QQQQIWNJKVDFNOFVNDFDDDJFKFJ
最终输出结果为:
D(5) F(5) I(1) J(3) K(2) N(3) O(1) Q(4) V(2) W(1)

这两个 就是今天的练习题,对于你们来说是不是小case呢?  如果是,说明你离大神的距离不远了,如果不是,你们懂的,就和我一样了,哈哈,好吧,时间也不早了,大家早点休息吧   好的东西我会记得分享,明天继续······


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马