在Java中,如何在特定日期生成随机名称?
这是我生成随机名称的程序:在Java中,如何在特定日期生成随机名称?,java,arrays,Java,Arrays,这是我生成随机名称的程序: String[] names = new String[]{"one","two","three","four","five"}; Random rd = new Random(); int x = rd.nextInt(names.length); 我需要它根据上周末的检查生成名称,如果生成的名称与上周末生成的名称匹配,那么程序将再次运行以生成不同的名称。 例
String[] names = new String[]{"one","two","three","four","five"};
Random rd = new Random();
int x = rd.nextInt(names.length);
我需要它根据上周末的检查生成名称,如果生成的名称与上周末生成的名称匹配,那么程序将再次运行以生成不同的名称。
例:如果“一”在周六生成,“二”在周日生成,那么下周这两个应该被排除在生成之外。
如何在Java中进行该检查?您可以通过运行while循环,直到生成的字符串与不需要的字符串不匹配 例如:
String[] names = new String[]{"one", "two", "three", "four", "five"};
String[] lastWeekend = new String[]{"one", "three"}; // you should get these from somewhere else
Random rd = new Random();
int x = rd.nextInt(names.length);
// using a list for convenience
while(Arrays.asList(lastWeekend).contains(names[x]))
{
x = rd.nextInt(names.length);
}
// names[x] will now be "two", "four" or "five"
您可以通过运行while循环来实现这一点,直到生成的字符串与不需要的字符串不匹配 例如:
String[] names = new String[]{"one", "two", "three", "four", "five"};
String[] lastWeekend = new String[]{"one", "three"}; // you should get these from somewhere else
Random rd = new Random();
int x = rd.nextInt(names.length);
// using a list for convenience
while(Arrays.asList(lastWeekend).contains(names[x]))
{
x = rd.nextInt(names.length);
}
// names[x] will now be "two", "four" or "five"
我需要它根据上周末生成名称检查,如果生成的名称与上周末生成的名称匹配,那么程序将再次运行以生成不同的名称
如果这对你不起作用,它可能会给你一些想法
- 随机选择两个名称作为周末名称
- 将这些名称从将来的使用中删除
- 下次,从可用列表中选择新名称
- 把旧名字加回去
- 并更新当前使用的名称
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class WeekEndCheck {
List<String> lastWeekendNames = new ArrayList<>();
List<String> availableNames = new LinkedList<>(
Arrays.asList("one", "two", "three", "four", "five"));
public static void main(String[] args) {
new WeekEndCheck().start();
}
public void start() {
// do it for 10 weekends, not two names should
// appear adjacent to each other
for (int i = 0; i < 10; i++) {
setWeekEndNames();
System.out.println("Weekend " + (i+1) + " " + lastWeekendNames);
}
}
Random r = new Random();
public void setWeekEndNames() {
List<String> temp = new ArrayList<>();
for (int i = 0; i < 2; i++) {
int indx = r.nextInt(availableNames.size());
temp.add(availableNames.remove(indx));
}
availableNames.addAll(lastWeekendNames);
lastWeekendNames.clear();
lastWeekendNames.addAll(temp);
}
}
更新
为了允许在周六和周日使用相同的名称,但在下一个周末不使用相同的名称,这应该是可行的。它与另一个类似,只是:
- 选择名称后,将保存索引并有条件地删除索引
- 如果两个索引相同,则只删除一个名称,因此无法在下一个周末使用
- 否则,要保持列表同步,请先删除较大的索引号,然后删除较小的索引号。否则,可能会删除错误的文件或引发异常
public void setWeekEndNames(){
List temp=new ArrayList();
int[]索引=新的int[2];
对于(int i=0;i<2;i++){
索引[i]=r.nextInt(availableNames.size());
临时添加(可用名称获取(索引[i]);
}
如果(索引[0]==索引[1]){
删除(索引[0]);
}否则{
移除(Math.max(索引[0],索引[1]);
移除(Math.min(索引[0],索引[1]);
}
availableNames.addAll(lastWeekendNames);
lastWeekendNames.clear();
最后一周名称添加所有(临时);
}
我需要它根据上周末生成名称检查,如果生成的名称与上周末生成的名称匹配,那么程序将再次运行以生成不同的名称
如果这对你不起作用,它可能会给你一些想法
- 随机选择两个名称作为周末名称
- 将这些名称从将来的使用中删除
- 下次,从可用列表中选择新名称
- 把旧名字加回去
- 并更新当前使用的名称
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class WeekEndCheck {
List<String> lastWeekendNames = new ArrayList<>();
List<String> availableNames = new LinkedList<>(
Arrays.asList("one", "two", "three", "four", "five"));
public static void main(String[] args) {
new WeekEndCheck().start();
}
public void start() {
// do it for 10 weekends, not two names should
// appear adjacent to each other
for (int i = 0; i < 10; i++) {
setWeekEndNames();
System.out.println("Weekend " + (i+1) + " " + lastWeekendNames);
}
}
Random r = new Random();
public void setWeekEndNames() {
List<String> temp = new ArrayList<>();
for (int i = 0; i < 2; i++) {
int indx = r.nextInt(availableNames.size());
temp.add(availableNames.remove(indx));
}
availableNames.addAll(lastWeekendNames);
lastWeekendNames.clear();
lastWeekendNames.addAll(temp);
}
}
更新
为了允许在周六和周日使用相同的名称,但在下一个周末不使用相同的名称,这应该是可行的。它与另一个类似,只是:
- 选择名称后,将保存索引并有条件地删除索引
- 如果两个索引相同,则只删除一个名称,因此无法在下一个周末使用
- 否则,要保持列表同步,请先删除较大的索引号,然后删除较小的索引号。否则,可能会删除错误的文件或引发异常
public void setWeekEndNames(){
List temp=new ArrayList();
int[]索引=新的int[2];
对于(int i=0;i<2;i++){
索引[i]=r.nextInt(availableNames.size());
临时添加(可用名称获取(索引[i]);
}
如果(索引[0]==索引[1]){
删除(索引[0]);
}否则{
移除(Math.max(索引[0],索引[1]);
移除(Math.min(索引[0],索引[1]);
}
availableNames.addAll(lastWeekendNames);
lastWeekendNames.clear();
最后一周名称添加所有(临时);
}
存储上周末选择的名称,当您为本周末选择时,对照这些值使用HashMap将以前生成的名称存储为值,键存储为天。检查该映射以生成随机名称。@ASAkram,取决于OP所说的“本周末”和“上周末”,OP似乎希望程序的后续执行记住之前执行所生成的内容。他们需要一个文件或数据库来完成这项工作。@SolomonSlow是的,我想是的。可能他/她想检查所有可能的组合,在这种情况下,这个答案会有所帮助。存储上周末选择的名称,当您选择本周末时,对照这些值检查使用HashMap将以前生成的名称存储为值,键存储为天。检查该映射以生成随机名称。@ASAkram,取决于OP所说的“本周末”和“上周末”,OP似乎希望程序的后续执行记住之前执行所生成的内容。他们需要一个文件或数据库来完成这项工作。@SolomonSlow是的,我想是的。也许他/她想检查所有可能的组合,在这种情况下,这个答案会有所帮助。我无法使用“List.of”(LinkedList(List.of))将名称添加到LinkedList.相反,我尝试在后面的方法中添加名称,结果如下:Weekend 1[1,4]Weekend 2[2,3]Weekend 3[3,3]Weekend 4[1,1]Weekend 5[4,4]Weekend 6[2,4]Weeke