Java报错:UIManager的put无法适配(int)参数,Map使用问题求助
问题分析与修正方案
首先,咱们直接说报错的核心原因:你调用put(randomNum)的时候只传了一个参数,但Map的put方法必须传入两个参数——键(Key)和值(Value),编译器找不到只接受单个int的put方法,所以抛出了这个错误。
另外,你的逻辑还有两个小问题:
- 你生成的
randomNum是rand.nextInt(7)+1,只能得到1-7的数字,但你的colours里还有blue对应8,这会导致永远选不到蓝色; - 你直接把数字存入
answerMap,但你的需求是存颜色,得把随机数字和colours里的颜色名关联起来才行。
修正后的代码方案(两种思路)
思路1:先建立数字到颜色的反向映射,再随机选
Random rand = new Random(); // 颜色名 -> 编号的映射 Map<String, Integer> colours = new HashMap<>(); {{ put("red", 1); put("white", 2); put("purple", 3); put("orange", 4); put("pink", 5); put("yellow", 6); put("green", 7); put("blue", 8); }}; // 先做一个编号 -> 颜色名的反向映射,方便根据随机数字找颜色 Map<Integer, String> numToColour = new HashMap<>(); for (Map.Entry<String, Integer> entry : colours.entrySet()) { numToColour.put(entry.getValue(), entry.getKey()); } // 存储4个随机颜色的Map(这里用1-4作为键,颜色名作为值,你也可以根据需求调整键的类型) Map<Integer, String> answer = new HashMap<>(); for (int i = 0; i < 4; i++) { // 生成1-8的随机数,覆盖所有颜色 int randomNum = rand.nextInt(8) + 1; String randomColour = numToColour.get(randomNum); answer.put(i + 1, randomColour); }
思路2:直接从颜色集合里随机选(更简洁)
如果不需要用到颜色的编号,直接从colours的键集合里随机抽取颜色更简单:
Random rand = new Random(); Map<String, Integer> colours = new HashMap<>(); {{ put("red", 1); put("white", 2); put("purple", 3); put("orange", 4); put("pink", 5); put("yellow", 6); put("green", 7); put("blue", 8); }}; // 把颜色名转成List,方便随机获取 List<String> colourList = new ArrayList<>(colours.keySet()); Map<Integer, String> answer = new HashMap<>(); for (int i = 0; i < 4; i++) { // 随机选一个颜色的索引 int randomIndex = rand.nextInt(colourList.size()); String randomColour = colourList.get(randomIndex); answer.put(i + 1, randomColour); }
额外注意点
- 如果你希望
answer的结构不是“序号→颜色”,而是单纯存储4个允许重复的颜色,那可能你需要用List<String>来替代Map——因为Map的核心是键值对的映射,键是唯一的,重复存同个颜色会覆盖原有条目,用List来存重复元素会更贴合需求。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

