我整天都在想我的项目的解决方案,需要根据类中的“步骤”字段来排列对象列表。我有以下课程:
public class Configuration{
private String name;
private int start; //starting value
private int end; //ending value
private int step; //append this to start value until end value is reached
}
//if I have the following sample:
List<Configuration> configurations = new ArrayList<>();
Configuration config1 = new Configuration("congif1", 1,2,1);
Configuration config2 = new Configuration("config2", 100,200,50);
我需要实现一个方法:
public Object/void print(List<Configuration> configurations);
这样,预期的输出将(在任何顺序,只要值是完整的)
1,100
2,100
1,150
2,150
1,200
2,200
我需要根据用户给定的配置设置运行所有不同的配置场景。如果我有3个对象:
Configuration config1 = new Configuration("congif1", 1,2,1);
Configuration config2 = new Configuration("config2", 100,150,50);
Configuration config3 = new Configuration("config3", 1000,2000,500);
那么输出应该是:
1,100,1000
2,100,1000
1,150,1000
2,150,1000
1,100,1500
2,100,1500
1,150,1500
2,150,1500
1,100,2000
2,100,2000
1,150,2000
2,150,2000
我尝试了以下嵌套循环,但它不会置换所有循环:
for(Configuration config:configurations){
for(int i=start; i<end; i+=step){
//code here
}
}
我想我需要一个递归类型,但我真的不知道怎么做
首先,我应该指出你的代码不正确。如何在循环中定义start
,end
和step
?你怎么能接触到它们?
接下来,我将向类Configuration
添加getter和一个方法,在两个配置之间进行排列,如下所示:
public class Configuration {
private String name;
private int start;
private int end;
private int step;
public Configuration(...) { // Some constructor }
public int getStart() { return start; }
public int getEnd() { return end; }
public int getStep() { return step; }
public void permutateWith(Configuration c) {
for(int i = start; i <= end; i += step) {
for(int j = c.getStart(); j <= c.getEnd(); j += c.getStep()) {
System.out.println(i + "," + j);
}
}
}
}
有了这个类,我们可以创建两个实例:
Configuration config1 = new Configuration("congif1", 1,2,1);
Configuration config2 = new Configuration("config2", 100,200,50);
并将其添加到列表中:
List<Configuration> configurations = new ArrayList<>();
configurations.add(config1);
configurations.add(config2);
现在,您可以编写一个方法printPermutations(List
private void printPermutations(List<Configuration> list) {
// Pick one element
for(int i = 0; i < list.length; i++) {
// Combine with all the others
for(int j = i + 1; j < list.length; j++) {
list.get(i).permutateWith(list.get(j));
}
}
}
我自己没试过但应该能解决你的问题。
Settings(配置设置) 是影响FreeMarker行为的已被命名的值。配置设置有很多, 例如:locale,number_format, default_encoding, template_exception_handler。可以参考 Configuration.setSetting(...)的Java API 文档 来查看配置设置的完整列表。 配置设置存储在 Configuration
有两个命令使用得最多了,从第一次调用 Git 到每天的日常微调及参考,这个两个命令就是: config 和 help 命令。 git config Git 做的很多工作都有一个默认方式。 对于绝大多数工作而言,你可以改变 Git 的默认方式,或者根据你的偏好来设置。 这些设置涵盖了所有的事,从告诉 Git 你的名字,到指定偏好的终端颜色,以及你使用的编辑器。 此命令会从几个特定的配置文件中读取和写
在 Serenity 平台,配置设置是只是简单的类,如: [SettingScope("Application"), SettingKey("Logging")] private class LogSettings { public LoggingLevel Level { get; set; } public string File { get; set; } publi
cmf_set_option($key, $data, $replace = false) 功能 设置系统配置,通用 参数 $key: string 配置键值,都小写 $data: array 配置值,数组 $replace: array 是否完全替换 返回 bool 是否成功
cmf_set_dynamic_config($data) 功能 设置动态配置 参数 $data: array 要设置的数据,格式["cmf_default_theme"=>'simpleboot3'] 返回 boolean
X2.2.0新增 sp_set_option($key,$data) 功能: 设置系统配置,通用 参数: $key: 配置的键名,英文下划线小写,最好加上自己的应用或插件名作为前级 $data:配置的值,数组 返回: 类型boolean,true设置成功 使用: $result = sp_set_option('portal_custom_settings',array('test'=>1));