2021-08-05 Java练习题

1、一、产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台。

package learn.java;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 17:50
 * <p>
 * 产生10个1-100的随机数,并放到一个数组中,
 * 把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
 */
public class RandomList {
    public static void main(String[] args) {
        Random r = new Random();
        int max = 100;
        int min = 1;
        int[] a = new int[10];
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            a[i] = r.nextInt(max) % (max - min + 1) + min;
            if (a[i] >= 10) {
                list.add(a[i]);
            }
        }
        list.forEach((i) -> System.out.print(i + " "));
    }
}

2、LinkedList使用,已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位String[] strs = {“12345”,“67891”,“12347809933”,“98765432102”,“67891”,“12347809933”}。

已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位String[] strs = {“12345”,“67891”,“12347809933”,“98765432102”,“67891”,“12347809933”}。将该数组里面的所有qq号都存放在LinkedList中,将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来。

package learn.java;

import java.util.*;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 17:59
 * <p>
 * 2、LinkedList使用
 * 已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位
 * String[] strs =
 * {"12345","67891","12347809933","98765432102","67891","12347809933"}。
 * <p>
 * 将该数组里面的所有qq号都存放在LinkedList中,
 * 将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来。
 */
public class LinkListQQ {
    public static void main(String[] args) {
        String[] strs = {"12345", "67891", "12347809933", "98765432102", "67891", "12347809933"};
        LinkedList<String> list = new LinkedList<>(Arrays.asList(strs));
        Set<String> set = new HashSet<>(list);
        list.clear();
        list.addAll(set);
        //迭代器
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            System.out.print(it.next()+" ");
        }
        System.out.println();
        //增强for循环
        for (String s : list) {
            System.out.print(s + " ");
        }
    }
}

3、双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码不重复)

package learn.java;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 18:18
 *
 * 3、双色球规则:
 * 双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。
 * 红色球号码从1—33中选择;蓝色球号码从1—16中选择;
 * 请随机生成一注双色球号码。(要求同色号码不重复)
 */
public class TCball {
    public static void main(String[] args) {
        Random r = new Random();
        int redMax = 33;
        int blueMax =16;
        int min = 1;
        int blue = r.nextInt(blueMax) % (blueMax - min + 1) + min;
        Set<Integer> set = new HashSet<>();
        while(true) {
            if (set.size()<=6){
                set.add(r.nextInt(redMax) % (redMax - min + 1) + min);
            }else{
                break;
            }
        }
        set.forEach((i)-> System.out.print(i+" "));
        System.out.print(blue);
    }
}

4、现在有一个map集合如下:

Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, “张三丰”);
map.put(2, “周芷若”);
map.put(3, “汪峰”);
map.put(4, “灭绝师太”);

要求:

1).遍历集合,并将序号与对应人名打印。

2).向该map集合中插入一个编码为5姓名为李晓红的信息

3).移除该map中的编号为1的信息

4).将map集合中编号为2的姓名信息修改为"周林"

package learn.java;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 18:29
 * <p>
 * 4、现在有一个map集合如下:
 * <p>
 * Map<Integer,String> map = new HashMap<Integer, String>();
 * map.put(1, "张三丰");
 * map.put(2, "周芷若");
 * map.put(3, "汪峰");
 * map.put(4, "灭绝师太");
 * <p>
 * 要求:
 * <p>
 * 1).遍历集合,并将序号与对应人名打印。
 * <p>
 * 2).向该map集合中插入一个编码为5姓名为李晓红的信息
 * <p>
 * 3).移除该map中的编号为1的信息
 * <p>
 * 4).将map集合中编号为2的姓名信息修改为"周林"
 */
public class MapPractice {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "张三丰");
        map.put(2, "周芷若");
        map.put(3, "汪峰");
        map.put(4, "灭绝师太");

        Set<Map.Entry<Integer, String>> entries = map.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            System.out.println(entry.getKey() + "." + entry.getValue());
        }
        map.put(5, "李晓红");
        map.remove(1);
        map.put(2, "周林");
    }
}

5、有2个数组,第一个数组内容为:[黑龙江省,浙江省,江西省,广东省,福建省],第二个数组为:[哈尔滨,杭州,南昌,广州,福州],将第一个数组元素作为key,第二个数组元素作为value存储到Map集合中。如{黑龙江省=哈尔滨, 浙江省=杭州, …}。

package learn.java;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 20:10
 * <p>
 * 有2个数组,第一个数组内容为:[黑龙江省,浙江省,江西省,广东省,福建省],
 * 第二个数组为:[哈尔滨,杭州,南昌,广州,福州],
 * 将第一个数组元素作为key,第二个数组元素作为value存储到Map集合中。
 * 如{黑龙江省=哈尔滨, 浙江省=杭州, …}。
 */
public class province {
    public static void main(String[] args) {
        String[] p = {"黑龙江省", "浙江省", "江西省", "广东省", "福建省"};
        String[] c = {"哈尔滨", "杭州", "南昌", "广州", "福州"};
        Map<String, String> map = new HashMap<>();
        for (int i = p.length - 1; i >=0; i--) {
            map.put(p[i], c[i]);
        }
        Set<String> mapSet = map.keySet();
        for (String k : mapSet) {
            System.out.println(k + "=" + map.get(k));
        }

    }
}

6、定义一个泛型为String类型的List集合,统计该集合中每个字符(注意,不是字符串)出现的次数。例如:集合中有”abc”、”bcd”两个元素,程序最终输出结果为:“a = 1,b = 2,c = 2,d = 1”。

package learn.java;
import java.util.ArrayList;
import java.util.*;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 20:31
 * <p>
 * 6、定义一个泛型为String类型的List集合,
 * 统计该集合中每个字符(注意,不是字符串)出现的次数。
 * 例如:集合中有”abc”、”bcd”两个元素,程序最终输出结果为:“a = 1,b = 2,c = 2,d = 1”。
 */
public class statistics {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abc");
        list.add("bcd");
        list.add("bcdgy");
        list.add("bvgcd");
        list.add("bcadd");
        Map<Character, Integer> map = new HashMap<>();
        for (String s : list) {
            //取出每个字符串
            //把字符串变成字符
            char[] c = s.toCharArray();
            //把字符和相对应的次数导入Map集合
            for (char ci : c) {
                //如果该char字符已经导入过,次数加1
                if (map.containsKey(ci)) {
                    map.put(ci, map.get(ci) + 1);
                } else {
                    //如果没导入过初始化次数为1
                    map.put(ci, 1);
                }
            }
        }
        Set<Map.Entry<Character, Integer>> mapSet = map.entrySet();
        for (Map.Entry<Character, Integer> entry : mapSet) {
            System.out.print(entry.getKey()+"="+entry.getValue()+" ");
        }

    }
}

7、利用Map,完成下面的功能:

(1)从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。

(2)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1994 2002 读入“荷兰”,应当输出 没有获得过世界杯

附:历届世界杯冠军

届数 举办年份 举办地点 冠军

第一届 1930年 乌拉圭 乌拉圭

第二届 1934年 意大利 意大利

package learn.java;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 21:26
 * <p>
 * 利用Map,完成下面的功能:
 * <p>
 * (1)从命令行读入一个字符串,
 * 表示一个年份,输出该年的世界杯冠军是哪支球队。
 * 如果该 年没有举办世界杯,则输出:没有举办世界杯。
 * <p>
 * (2)在原有世界杯Map 的基础上,增加如下功能:
 * 读入一支球队的名字,输出该球队夺冠的年份列表。
 * 例如,读入“巴西”,
 * 应当输出 1958 1962 1970 1994 2002
 * 读入“荷兰”,
 * 应当输出 没有获得过世界杯
 * <p>
 * 届数
 * <p>
 * 举办年份
 * <p>
 * 举办地点
 * <p>
 * 冠军
 */
public class WorldCup {
    private int sessions;
    private int year;
    private String place;
    private String champion;

    public WorldCup() {
    }

    ;

    public WorldCup(int sessions, int year, String place, String champion) {
        this.sessions = sessions;
        this.year = year;
        this.place = place;
        this.champion = champion;
    }

    @Override
    public String toString() {
        return "WorldCup{" +
                "sessions=" + sessions +
                ", year=" + year +
                ", place='" + place + '\'' +
                ", champion='" + champion + '\'' +
                '}';
    }

    public int getSessions() {
        return sessions;
    }

    public void setSessions(int sessions) {
        this.sessions = sessions;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public String getPlace() {
        return place;
    }

    public void setPlace(String place) {
        this.place = place;
    }

    public String getChampion() {
        return champion;
    }

    public void setChampion(String champion) {
        this.champion = champion;
    }
}

package learn.java;

import java.util.*;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 21:35
 * <p>
 * 利用Map,完成下面的功能:
 * <p>
 * (1)从命令行读入一个字符串,
 * 表示一个年份,输出该年的世界杯冠军是哪支球队。
 * 如果该 年没有举办世界杯,则输出:没有举办世界杯。
 * <p>
 * (2)在原有世界杯Map 的基础上,增加如下功能:
 * 读入一支球队的名字,输出该球队夺冠的年份列表。
 * 例如,读入“巴西”,应当输出 1958 1962 1970 1994 2002
 * 读入“荷兰”,应当输出 没有获得过世界杯
 */
public class worldCupJ {
    private static final Map<Integer, WorldCup> maps = new HashMap<>(16, 0.75F);

    //通过年份获取冠军
    public static WorldCup getWorldCupYear(Integer year) {
        if (year <= 0) {
            return null;
        }
        // 先判断是否有这个key
        if (maps.containsKey(year)) {
            return maps.get(year);
        }
        return null;
    }

    //通过国家的名字去获取冠军的年份
    public static List<Integer> getYearsByCountry(String countryName) {
        if (countryName == null || countryName.isEmpty()) {
            return null;
        }
        // 准备一个装年份的容器
        List<Integer> years = new ArrayList<>();
        // 把maps的值全部拿到
        Collection<WorldCup> values = maps.values();
        // 遍历values
        for (WorldCup value : values) {
            if (value.getChampion().equals(countryName)) {
                // 有冠军
                years.add(value.getYear());
            }
        }
        return years;
    }

    public static void whenChampion() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:");
        int year = scanner.nextInt();
        WorldCup champion = getWorldCupYear(year);
        if (champion == null) {
            System.out.println(year + "这年没有冠军!");
        } else {
            System.out.println(year + "这年的冠军是:" + champion.getChampion());
        }
    }

    public static void whoChampion() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入国家的而名字:");
        String countryName = scanner.nextLine();
        List<Integer> years = getYearsByCountry(countryName);
        if (years == null || years.size() == 0) {
            System.out.println("这个国家没有得过冠军");
        } else {
            System.out.println(years);
        }
    }

    public static void whatOperation() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("1.输入年份知道谁赢得了世界杯。");
        System.out.println("2.输入国家名了解他赢得了几次世界杯。");
        System.out.print("你想选择什么(输入1或者2进行选择):");
        int o = scanner.nextInt();
        switch (o) {
            case 1:
                whenChampion();
                break;
            case 2:
                whoChampion();
                break;
            default:
                System.out.println("输错了,请重输。");
                whatOperation();
        }
        whatOperation();
    }

    public static void main(String[] args) {
        maps.put(2014, new WorldCup(20, 2014, "巴西", "德国"));
        maps.put(2010, new WorldCup(19, 2010, "南非", "西班牙"));
        maps.put(2006, new WorldCup(18, 2006, "德国", "意大利"));
        maps.put(2002, new WorldCup(17, 2002, "韩日", "巴西"));
        maps.put(1998, new WorldCup(16, 1998, "法国", "法国"));
        maps.put(1994, new WorldCup(15, 1994, "美国", "巴西"));
        maps.put(1990, new WorldCup(14, 1990, "意大利", "西德"));
        maps.put(1986, new WorldCup(13, 1986, "墨西哥", "阿根廷"));
        maps.put(1982, new WorldCup(12, 1982, "西班牙", "意大利"));
        maps.put(1978, new WorldCup(11, 1978, "阿根廷", "阿根廷"));
        maps.put(1974, new WorldCup(10, 1974, "前西德", "西德"));
        maps.put(1970, new WorldCup(9, 1970, "墨西哥", "巴西"));
        maps.put(1966, new WorldCup(8, 1966, "英格兰", "英格兰"));
        maps.put(1962, new WorldCup(7, 1962, "智利", "巴西"));
        maps.put(1958, new WorldCup(6, 1958, "瑞典", "巴西"));
        maps.put(1954, new WorldCup(5, 1954, "瑞士", "西德"));
        maps.put(1950, new WorldCup(4, 1950, "巴西", "乌拉圭"));
        maps.put(1938, new WorldCup(3, 1938, "法国", "意大利"));
        maps.put(1934, new WorldCup(2, 1934, "意大利", "意大利"));
        maps.put(1930, new WorldCup(1, 1930, "乌拉圭", "乌拉圭"));

        whatOperation();
    }
}

8、综合练习

1)站编号和站名对应关系如下:

        1=朱辛庄

        2=育知路

        3=平西府

        4=回龙观东大街

        5=霍营

   //....

将以上对应关系的数据存储到map集合中,key:表示站编号,value:表示站名,并遍历打印(可以不按顺序打印):

   第10站: 森林公园南门

   第6站: 育新

   第12站: 奥体中心

   第13站: 北土城

   //...

2)计算地铁票价规则:

   总行程 3站内(包含3站)收费3元,

   3站以上但不超过5站(包含5站)的收费4元,

   5站以上的,在4元的基础上,每多1站增加2元,

   10元封顶;

3)打印格式(需要对键盘录入的上车站和到达站进行判断,如果没有该站,提示重新输入,直到站名存在为止):

   注意:每站需要2分钟

   请输入上车站:

   沙河

   您输入的上车站:沙河不存在,请重新输入上车站:

   上地

   您输入的上车站:上地不存在,请重新输入上车站:

   朱辛庄

   请输入到达站:

   沙河

   您输入的到达站:沙河不存在,请重新输入到达站:

   西二旗

   您输入的到达站:西二旗不存在,请重新输入到达站:

   西小口

   从朱辛庄到西小口共经过6站收费6元,大约需要 12分钟
package learn.java;

import java.util.*;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/5 23:15
 * <p>
 * 1.将以上对应关系的数据存储到map集合中,key:表示站编号,value:表示站名,并遍历打印(可以不按顺序打印):
 * <p>
 * 2).计算地铁票价规则:
 * 总行程 3站内(包含3站)收费3元,
 * 3站以上但不超过5站(包含5站)的收费4元,
 * 5站以上的,在4元的基础上,每多1站增加2元,
 * 10元封顶;
 * <p>
 * 3).打印格式(需要对键盘录入的上车站和到达站进行判断,如果没有该站,提示重新输入,直到站名存在为止):
 */
public class busStop {
    private static final Map<Integer, String> map = new HashMap<>();

    public busStop() {
        map.put(1, "太阳");
        map.put(2, "水星");
        map.put(3, "金星");
        map.put(4, "地球");
        map.put(5, "火星");
        map.put(6, "木星");
        map.put(7, "土星");
        map.put(8, "天王星");
        map.put(9, "海王星");
        map.put(10, "冥王星");
    }

    public static void main(String[] args) {
        //第一题
        busStop busStop = new busStop();
        System.out.println("🚌 公交车站牌 🚌");
        Set<Map.Entry<Integer, String>> entry = map.entrySet();
        for (Map.Entry<Integer, String> map : entry) {
            System.out.println(map.getKey() + "=" + map.getValue());
        }

        //第三题
        int upNum = 0;
        int downNum = 0;
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入上车的车站:");
        String upStation = sc.nextLine();
        boolean flagUp = true;
        while (flagUp) {
            Iterator it = entry.iterator();
            while (it.hasNext()) {
                Map.Entry<Integer, String> mapEntry = (Map.Entry<Integer, String>) it.next();
                if (mapEntry.getValue().equals(upStation)) {
                    upNum = mapEntry.getKey();
                    flagUp = false;
                }
            }
            if (flagUp) {
                System.out.println("请重新输入:");
                upStation = sc.nextLine();
            }
        }
        System.out.print("请输入下车的车站:");
        String downStation = sc.nextLine();
        boolean flagDown = true;
        while (flagDown) {
            Iterator it = entry.iterator();
            while (it.hasNext()) {
                Map.Entry<Integer, String> mapEntry = (Map.Entry<Integer, String>) it.next();
                if (mapEntry.getValue().equals(downStation)) {
                    downNum = mapEntry.getKey();
                    flagDown = false;
                }
            }
            if (flagDown) {
                System.out.println("请重新输入:");
                downStation = sc.nextLine();
            }
        }

        //第二题
        if (Math.abs(downNum - upNum) <= 3) {
            System.out.println("从" + upStation + "到" + downStation + "要经历" + Math.abs(downNum - upNum) + "站,累计" + "收费" + 3 + "元,大概需要用时" + 2 * Math.abs(downNum - upNum) + "分钟。");
        } else if (Math.abs(downNum - upNum) > 3 && Math.abs(downNum - upNum) <= 5) {
            System.out.println("从" + upStation + "到" + downStation + "要经历" + Math.abs(downNum - upNum) + "站,累计" + "收费" + 4 + "元,大概需要用时" + 2 * Math.abs(downNum - upNum) + "分钟。");
        } else if (Math.abs(downNum - upNum) > 5) {
            int prize = (Math.abs(downNum - upNum) - 5) * 2 + 4;
            if (prize >= 10) {
                prize = 10;
            }
            System.out.println("从" + upStation + "到" + downStation + "要经历" + Math.abs(downNum - upNum) + "站,累计" + "收费" + prize + "元,大概需要用时" + 2 * Math.abs(downNum - upNum) + "分钟。");
        }
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PerCheung

觉得有帮助的话就打赏支持一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值