Java 从地图中随机选择n个项目
我试图从HashMap中随机生成“n”个项目,其中“n”由用户确定 以下是我到目前为止的情况:Java 从地图中随机选择n个项目,java,list,random,arraylist,hashmap,Java,List,Random,Arraylist,Hashmap,我试图从HashMap中随机生成“n”个项目,其中“n”由用户确定 以下是我到目前为止的情况: public static void main(String []args){ int numColors = 3; HashMap<String, String> map = new HashMap<String, String>(); map.put("White","FFFFFF"); map.put("Blank","000000");
public static void main(String []args){
int numColors = 3;
HashMap<String, String> map = new HashMap<String, String>();
map.put("White","FFFFFF");
map.put("Blank","000000");
map.put("Red","ED0A15");
map.put("Green","06F76C");
map.put("Blue","0689FF");
map.put("Sky Blue","00C2FC");
map.put("Light Blue","08F0FC");
map.put("Silver","C0BFC5");
map.put("Mint","ABD3CA");
map.put("Off White","FFEFF0");
map.put("Purple","736FFA");
map.put("Lavendar","DEBEEF");
map.put("Hot Pink","F5159A");
map.put("Pink","DB39CC");
map.put("Light Pink","F5C2E3");
map.put("Blush","C95FA7");
map.put("Orange","D4361B");
map.put("Yellow","DEF231");
map.put("Warm White","F3E4C3");
map.put("Turquoise","01DCA4");
List<String> valuesList = new ArrayList<String>(map.values());
int randomIndex = new Random().nextInt(valuesList.size());
String randomValue = valuesList.get(randomIndex);
System.out.printf(randomValue);
}
publicstaticvoidmain(字符串[]args){
int numColors=3;
HashMap=newHashMap();
地图。放置(“白色”、“FFFFFF”);
map.put(“空白”、“000000”);
地图放置(“红色”、“ED0A15”);
地图放置(“绿色”、“06F76C”);
地图放置(“蓝色”、“0689FF”);
地图放置(“天蓝色”、“00C2FC”);
地图放置(“浅蓝色”、“08F0FC”);
地图放置(“银色”、“C0BFC5”);
地图放置(“造币厂”、“ABD3CA”);
地图。放置(“灰白色”、“FFEF0”);
地图放置(“紫色”、“736FFA”);
地图放置(“Lavendar”、“DEBEEF”);
地图放置(“热粉色”、“F5159A”);
地图放置(“粉色”、“DB39CC”);
地图放置(“淡粉色”、“F5C2E3”);
地图放置(“脸红”、“C95FA7”);
地图放置(“橙色”、“D4361B”);
地图放置(“黄色”、“DEF231”);
地图放置(“暖白色”、“F3E4C3”);
地图放置(“绿松石”、“01DCA4”);
列表值列表=新的ArrayList(map.values());
int randomIndex=new Random().nextInt(valuesList.size());
String randomValue=valuesList.get(随机索引);
系统输出打印F(随机值);
}
它为我打印我想要的1个随机颜色(十六进制),但是我不确定如何/使用哪个循环从地图生成3个随机十六进制颜色。我将numColors声明为3只是为了测试一下
以下是我最终的结果:
public static void main(String []args){
int numColors = 3;
HashMap<String, String> map = new HashMap<String, String>();
map.put("White","FFFFFF");
map.put("Blank","000000");
map.put("Red","ED0A15");
map.put("Green","06F76C");
map.put("Blue","0689FF");
map.put("Sky Blue","00C2FC");
map.put("Light Blue","08F0FC");
map.put("Silver","C0BFC5");
map.put("Mint","ABD3CA");
map.put("Off White","FFEFF0");
map.put("Purple","736FFA");
map.put("Lavendar","DEBEEF");
map.put("Hot Pink","F5159A");
map.put("Pink","DB39CC");
map.put("Light Pink","F5C2E3");
map.put("Blush","C95FA7");
map.put("Orange","D4361B");
map.put("Yellow","DEF231");
map.put("Warm White","F3E4C3");
map.put("Turquoise","01DCA4");
List<String> keys = new ArrayList<String>(map.keySet());
Random rand = new Random();
for (int i = 0; i < numColors; i++) {
String key = keys.get(rand.nextInt(keys.size()));
System.out.println(map.get(key));
}
}
publicstaticvoidmain(字符串[]args){
int numColors=3;
HashMap=newHashMap();
地图。放置(“白色”、“FFFFFF”);
map.put(“空白”、“000000”);
地图放置(“红色”、“ED0A15”);
地图放置(“绿色”、“06F76C”);
地图放置(“蓝色”、“0689FF”);
地图放置(“天蓝色”、“00C2FC”);
地图放置(“浅蓝色”、“08F0FC”);
地图放置(“银色”、“C0BFC5”);
地图放置(“造币厂”、“ABD3CA”);
地图。放置(“灰白色”、“FFEF0”);
地图放置(“紫色”、“736FFA”);
地图放置(“Lavendar”、“DEBEEF”);
地图放置(“热粉色”、“F5159A”);
地图放置(“粉色”、“DB39CC”);
地图放置(“淡粉色”、“F5C2E3”);
地图放置(“脸红”、“C95FA7”);
地图放置(“橙色”、“D4361B”);
地图放置(“黄色”、“DEF231”);
地图放置(“暖白色”、“F3E4C3”);
地图放置(“绿松石”、“01DCA4”);
List keys=newarraylist(map.keySet());
Random rand=新的Random();
for(int i=0;i
如果我理解你的问题,你可以用
List<String> keys = new ArrayList<String>(map.keySet());
Random rand = new Random();
for (int i = 0; i < numColors; i++) {
String key = keys.get(rand.nextInt(keys.size()));
System.out.println(map.get(key));
}
List keys=new ArrayList(map.keySet());
Random rand=新的Random();
for(int i=0;i
注释中提到了更改
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int numColors = 3;
HashMap<String, String> map = new HashMap<String, String>();
map.put("White", "FFFFFF");
map.put("Blank", "000000");
map.put("Red", "ED0A15");
map.put("Green", "06F76C");
map.put("Blue", "0689FF");
map.put("Sky Blue", "00C2FC");
map.put("Light Blue", "08F0FC");
map.put("Silver", "C0BFC5");
map.put("Mint", "ABD3CA");
map.put("Off White", "FFEFF0");
map.put("Purple", "736FFA");
map.put("Lavendar", "DEBEEF");
map.put("Hot Pink", "F5159A");
map.put("Pink", "DB39CC");
map.put("Light Pink", "F5C2E3");
map.put("Blush", "C95FA7");
map.put("Orange", "D4361B");
map.put("Yellow", "DEF231");
map.put("Warm White", "F3E4C3");
map.put("Turquoise", "01DCA4");
// scanner for accepting values
Scanner scan = new Scanner(System.in);
System.out.println("Enter number");
int N = scan.nextInt();
// random object for generating random values
Random rand = new Random();
// converting map values to list
List<String> valuesList = new ArrayList<String>(map.values());
for (int i = 1; i <= N; i++) {
// choose random value
int randomIndex = rand.nextInt(valuesList.size());
// get value
String randomValue = valuesList.get(randomIndex);
// printing
System.out.println("Random value " + i + " : " + randomValue);
}
}
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Random;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
int numColors=3;
HashMap=newHashMap();
地图。放置(“白色”、“FFFFFF”);
map.put(“空白”、“000000”);
地图放置(“红色”、“ED0A15”);
地图放置(“绿色”、“06F76C”);
地图放置(“蓝色”、“0689FF”);
地图放置(“天蓝色”、“00C2FC”);
地图放置(“浅蓝色”、“08F0FC”);
地图放置(“银色”、“C0BFC5”);
地图放置(“造币厂”、“ABD3CA”);
地图。放置(“灰白色”、“FFEF0”);
地图放置(“紫色”、“736FFA”);
地图放置(“Lavendar”、“DEBEEF”);
地图放置(“热粉色”、“F5159A”);
地图放置(“粉色”、“DB39CC”);
地图放置(“淡粉色”、“F5C2E3”);
地图放置(“脸红”、“C95FA7”);
地图放置(“橙色”、“D4361B”);
地图放置(“黄色”、“DEF231”);
地图放置(“暖白色”、“F3E4C3”);
地图放置(“绿松石”、“01DCA4”);
//用于接受值的扫描仪
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入编号”);
int N=scan.nextInt();
//用于生成随机值的随机对象
Random rand=新的Random();
//将贴图值转换为列表
列表值列表=新的ArrayList(map.values());
对于(inti=1;i来说,一个简单的解决方案是使用Collections.shuffle(map)
对整个映射进行洗牌。然后对其进行迭代并拾取前n个元素
当然,如果地图很大,你只需要几个元素,这就没有意义了
编辑:
当然,使用此解决方案,您不会像Malt建议的那样获得任何重复条目,以防止重复并保持代码干净:
List<String> list = new ArrayList(map.values() );
Collections.shuffle(list);
List List=newarraylist(map.values());
集合。洗牌(列表);
试试for-loop如何。创建一个Random
的实例,然后使用for-loop多次运行随机选择。是否要复制?我想要3种随机颜色,这样它可以复制,也可以不复制。@user3130128 for语句是我的代码示例中所需的,这是所有的映射元素,所以它不是很简单arge。注意到这可以防止重复结果可能会很好。谢谢Elliott,它工作得很好。只是一个附带问题,这个解决方案允许重复颜色正确吗?所以FFFFFF理论上可以出现两次。回答了我自己的问题,它确实允许重复。
List<String> list = new ArrayList(map.values() );
Collections.shuffle(list);