Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java循环问题_Java_String_Loops_Do While - Fatal编程技术网

Java循环问题

Java循环问题,java,string,loops,do-while,Java,String,Loops,Do While,我有大约15个字符串变量,如下所示 String jack = "blue, orange, green, purple"; String blue = "Yellow, red"; String yellow = "sky, wind, earth"; String orange = "char1, char2 , char3"; 我正在尝试将字符串“Jack”添加到arrayList中。我正在使用split函数(在“''”上拆分)将它们添加到arrayList中 我所要做的就是当我

我有大约15个字符串变量,如下所示

String jack = "blue, orange, green, purple";

String blue = "Yellow, red";

String yellow = "sky, wind, earth";

String orange  = "char1, char2 , char3";
我正在尝试将字符串“Jack”添加到arrayList中。我正在使用split函数(在“''”上拆分)将它们添加到arrayList中

我所要做的就是当我到达jack字符串中的“蓝色”时,我必须在添加“橙色”等之前将“黄色”和“红色”添加到arraylist中


如何实现这一点?非常感谢您的帮助。

使用变量名称的行为称为反射。这可能不是您想要做的

您可以初始化
HashMap
,以(可能)实现您想要的:

Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("jack", Array.asList("blue", "orange", "green", "purple"));
map.put("blue", Array.asList("yellow", "red"));
map.put("yellow", Array.asList("sky", "wind", "earth"));
map.put("orange", Array.asList("char1", "char2", "char3"));

List<String> results = new ArrayList<String>();
for (String s : map.get("jack")) {
    if (map.get(s) != null) {
        for (String s2 : map.get(s)) { results.add(s2); }
    }    
}
Map Map=newhashmap();
map.put(“jack”,Array.asList(“蓝色”、“橙色”、“绿色”、“紫色”);
map.put(“蓝色”,Array.asList(“黄色”,“红色”);
地图.put(“黄色”,数组.asList(“天空”,“风”,“地球”);
map.put(“橙色”,Array.asList(“char1”,“char2”,“char3”);
列表结果=新建ArrayList();
for(字符串s:map.get(“jack”)){
if(map.get(s)!=null){
对于(字符串s2:map.get(s)){results.add(s2);}
}    
}

您没有提到是否要递归地执行此操作(例如,每当您点击一种颜色时,使用该颜色的列表)。我并没有这样实现它,但如果您需要它,您应该从堆栈中推送和弹出(类似于深度优先搜索).

尝试在代码中使用变量名称作为逻辑的一部分,几乎肯定反映了设计问题。生成的代码将很脆弱且难以阅读。除非您被迫在不进行更改的情况下使用该代码,否则我建议重构以使用不同的方法:

Map<String, List<String>> colours = new HashMap<>();
colours.put("blue", Arrays.asList("yellow", "red"));
colours.put("yellow", Arrays.asList("sky", "wind", "earth"));
colours.put("orange", Arrays.asList("char1", "char2", "char3"));

String result = Arrays.stream(jack.split(", "))
    .map(str -> colours.getOrDefault(str, str))
    .collect(Collectors.joining(", "));
Map colors=newhashmap();
颜色.put(“蓝色”),数组.asList(“黄色”,“红色”);
颜色。放置(“黄色”,数组。asList(“天空”,“风”,“地球”);
颜色.put(“橙色”,数组.asList(“char1”,“char2”,“char3”);
字符串结果=Arrays.stream(jack.split(“,”))
.map(str->colors.getOrDefault(str,str))
.collect(收集器。连接(“,”);

请阅读以下关于如何在此网站上提问的文章:。至少,我们需要您向我们展示您的代码,并告诉我们具体出了什么问题。离题评论:在这种情况下,最好使用
Array.asList(“蓝色”、“橙色”)
而不是使用带有初始值设定项技巧的匿名类(new ArrayList(){{add(…);add(…)}}`)是为了可读性。@AdrianShum谢谢,我会把它改成那样的。好多了!