Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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中制作名称生成器,将生成的字符数量限制为12个,但不会';不要断章取义?_Java_String_Random_Generator - Fatal编程技术网

在Java中制作名称生成器,将生成的字符数量限制为12个,但不会';不要断章取义?

在Java中制作名称生成器,将生成的字符数量限制为12个,但不会';不要断章取义?,java,string,random,generator,Java,String,Random,Generator,我正在寻找一种制作随机名称生成器的方法,它将生成的字符串的字符数限制为12个 例如,我有一个字符串“龙”和另一个字符串“杀手13”。如果随机匹配,则有14个字符。我希望它选择的名称,将符合2个完整的字符串到一个名称12个字符总数;因此,如果“龙”和“杀手13”匹配在一起,我不想得到“杀手”,因为它切断了“杀手13”的最后两个字符。这样做怎么样 // A List to hold all the names List<String> namesList = new ArrayList&

我正在寻找一种制作随机名称生成器的方法,它将生成的字符串的字符数限制为12个


例如,我有一个字符串“龙”和另一个字符串“杀手13”。如果随机匹配,则有14个字符。我希望它选择的名称,将符合2个完整的字符串到一个名称12个字符总数;因此,如果“龙”和“杀手13”匹配在一起,我不想得到“杀手”,因为它切断了“杀手13”的最后两个字符。

这样做怎么样

// A List to hold all the names
List<String> namesList = new ArrayList<>();

// Create the full list of names
String[] names = {"mike", "Dragon", "jason", "freddy", "john", "mic"};

// Store them into the List
namesList = new ArrayList(Arrays.asList(names));

// Randomly get the first part of the name
int randomIndex = new Random().nextInt(names.length - 1);
String firstName = namesList.get(randomIndex);
String lastName = null;

// Figure out the size remaining
int remainSize = 12 - firstName.length();

// If desired, remove the element from the List so you don't get "DragonDragon"
namesList.remove(randomIndex);

// Randomly shuffle the list
long seed = System.nanoTime();
Collections.shuffle(namesList, new Random(seed));

// For each name, grab the first one that will complete the size 12
for (String name : namesList) {
    int nameSize = name.length();

    if (nameSize <= remainSize) {
        lastName = name;
        break;
    }
}

String newName = firstName + lastName;
System.out.println("Generated name: " + newName + ", with size " + newName.length());
//保存所有名称的列表
List namesList=new ArrayList();
//创建完整的姓名列表
String[]name={“mike”、“Dragon”、“jason”、“freddy”、“john”、“mic”};
//将它们存储到列表中
namesList=newarraylist(Arrays.asList(names));
//随机获取名称的第一部分
int randomIndex=new Random().nextInt(names.length-1);
String firstName=namesList.get(随机索引);
字符串lastName=null;
//计算出剩余的大小
int remainSize=12-firstName.length();
//如果需要,从列表中删除该元素,这样您就不会得到“DragonDragon”
名称列表。删除(随机索引);
//随机洗牌列表
长种子=System.nanoTime();
洗牌(名称列表,新随机(种子));
//对于每个名字,抓取第一个将完成大小12的名字
用于(字符串名称:名称列表){
int nameSize=name.length();

如果(命名您可以尝试以下方法:

String[] names1 = { "name", "name2", "name3", "name4" };
String[] names2 = { "name", "name2", "name3", "name4" };
int lengthNames1 = names1.Length();
int lengthNames2 = names2.Length();
String name1Random = names1[randInt(0,lengthNames1)-1];
String name2Random = names2[randInt(0,lengthNames2)-1];
String finalName = ( name1Random + name1Random ).substring(0, 11);

public static int randInt(int min, int max) {

    // NOTE: Usually this should be a field rather than a method
    // variable so that it is not re-seeded every call.
    Random rand = new Random();

    // nextInt is normally exclusive of the top value,
    // so add 1 to make it inclusive
    int randomNum = rand.nextInt((max - min) + 1) + min;

    return randomNum;
}
我无法部署此代码,但必须是正确的


PD:我用这个例子来随机生成器

这里有一个我突然想到的东西。TMath.rand只返回两个参数值之间的一个随机值。在实际应用中,必须检查maxlen值是否太小以至于生成器找不到任何适合的值。然后它将永远循环。或者干脆删除to指定调用中的最大长度

public class NameGenerator{
    private final String[] Names1 = { "Dragon", "Duck", "Pig", "Phoenix", "Behemoth" };
    private final String[] Names2 = { "Slayer", "Brusher", "Companion", "Rider", "Food" };
    private final int Name1Len = Names1.length;
    private final int Name2Len = Names2.length;
    private int mMaxNameLen;

    public NameGenerator( int MaxNameLen ){
        mMaxNameLen = MaxNameLen;
    }

    public String getName(){
        return getName( mMaxNameLen );
    }

    public String getName( int maxlen ){
        String lFirst = Names1[ (int) TMath.rand( 0, mName1Len - 1 ) ];
        String lSecond = Names2[ (int) TMath.rand( 0, mName2Len - 1 ) ];

        while( lFirst.length() + lSecond.length() > maxlen ){
            System.err.println( "Rejected: " + lFirst + lSecond );
            lFirst = Names1[ (int) TMath.rand( 0, mName1Len - 1 ) ];
            lSecond = Names2[ (int) TMath.rand( 0, mName2Len - 1 ) ];
        }
        return lFirst + lSecond;
    }

    private void run( int trys ){
        for( int i = 0; i < trys; i++ ){
            System.out.println( "Accepted: " + getName() );
        }
    }

    public static void main( String[] args ){
        new NameGenerator( 12 ).run( 15 );
    }
}
公共类名称生成器{
私有最终字符串[]名称1={“龙”、“鸭”、“猪”、“凤凰”、“庞然大物”};
私有最终字符串[]名称2={“杀戮者”、“刷者”、“同伴”、“骑士”、“食物”};
私有最终int-Name1Len=name1.length;
私有最终int-Name2Len=name2.length;
私人内特mMaxNameLen;
公共名称生成器(int MaxNameLen){
mMaxNameLen=MaxNameLen;
}
公共字符串getName(){
返回getName(mMaxNameLen);
}
公共字符串getName(int-maxlen){
字符串lFirst=Names1[(int)TMath.rand(0,mName1Len-1)];
字符串lSecond=Names2[(int)TMath.rand(0,mName2Len-1)];
而(lffirst.length()+lSecond.length()>maxlen){
System.err.println(“拒绝:+lFirst+lSecond”);
lFirst=Names1[(int)TMath.rand(0,mName1Len-1)];
lSecond=Names2[(int)TMath.rand(0,mName2Len-1)];
}
返回lFirst+lSecond;
}
专用无效运行(int trys){
for(int i=0;i
您是否已经提前计算出所有名称段?是的,它将有如下内容:字符串[]名称1={“名称”,“名称2”,};字符串[]名称2={“字符串”,“字符串2”};然后从每个数组中选择一个,并将它们匹配在一起编辑:很抱歉我是新来的哇!!非常感谢!我实际上从这个答案中学到了很多东西,也感谢你的评论。再次感谢这正是我需要的。很高兴它成功了!:-)我认为只给你代码对你以后的工作没有帮助。知道为什么代码是这样做是很重要的。@David-我更新了
Collections.shuffle()
方法,使它更随机。我100%同意。最好的学习方法是自己动手。(至少对我来说)哈哈!谢谢。我正在使用名称生成器在我的MMO中创建人工智能玩家,他们的最大名称空间为12,因此这将非常有助于生成他们的名称。:)