2015-10-18 51 views
0

我正在尝试编写一个程序,使用随机生成器创建随机单词。但是,如何将随机生成器生成的字符添加到字符串?是“a:z”的权利?或如何告诉发电机用A和Z之间的所有数字如何将字符连接到字符串?

public class StringTraining extends ConsoleProgram { 
public void run() { 
    String s1 = null; 
    randomChar(); 
    s1.concat(randomChar()); 
    println(s1); 
} 

private String randomChar() { 
    String word = rgen.nextBoolean() ? "a" : "z"; 
    return word; 
} 
+0

与使用随机双生成器(假设字符要均匀分布)相比,使用随机布尔生成器编码所有26个字母更难以实现。不,“a”..“z”的实现不正确,现在你得到“a”或“z”。 –

回答

0

的Java String s为不可变的,所以你不能以任何方式修改的字符串。 s1.concat(...)会为您返回一个新的String对象。如果需要,您可以执行类似s1=s1.concat(...)的操作,如果需要某些性能,则可以使用实现可变字符串的StringBuffer类。

+0

Downvoter可能会给出一些解释... –

0
(condition) ? ifTrue : ifFalse 

这就是你的方法正在做的。你的意思是“如果我们生成一个真实的陈述,我们使用一个,如果我们生成一个假,我们使用z。”

听起来好像你想在a到z的RANGE中使用随机字符。最简单的方法可能是使用字符并从范围中生成一个数字。

字符在内部的行为与整数几乎相同,您可以在其中添加字符以增加可能的字符。由于这个原因,你只需要在'a'到'z'范围内生成一个字符。自从我碰到java之后已经有一段时间了,所以我不知道是否有一种简单的方法可以做到这一点。但是如果你想用稍微杂乱一些的方式来查找为你做的库,你可以从'a'开始,并生成一个介于0和25之间的随机数(包括0和25),并将结果添加到'a ”。例如,'a'+ 1将返回'b'。

然后,只需将该字符追加到您的单词中,即可设置!

注意:字符和字符串是不同的。这个逻辑不适用于字符串。您需要使用单引号而不是双引号将“a”初始化为字符。

0

我从字面上花了今天这样做的乐趣作为一个学习的经验。也许别人可以给出比我更优雅的答案,但这是我做到的。

public static String getString(){ 

    char[] result = new char[10]; 

    for(int a=0; a<result.length; a++){ 
     result[a] = getLetter(); 
    } 

    return new String(result); 
} 

public static char getLetter(){ 

    boolean case = true; 
    if((1 + (Math.random() * 2) == 2){ 
     case = false; 
    }   

    if(case){ 
     switch((int) (1 + (Math.random() * 26))){ 

      case 1: 
       return 'a'; 
      case 2: 
       return 'b'; 
      case 3: 
       return 'c'; 
      case 4: 
       return 'd'; 
      case 5: 
       return 'e'; 
      case 6: 
       return 'f'; 
      case 7: 
       return 'g'; 
      case 8: 
       return 'h'; 
      case 9: 
       return 'i'; 
      case 10: 
       return 'j'; 
      case 11: 
       return 'k'; 
      case 12: 
       return 'l'; 
      case 13: 
       return 'm'; 
      case 14: 
       return 'n'; 
      case 15: 
       return 'o'; 
      case 16: 
       return 'p'; 
      case 17: 
       return 'q'; 
      case 18: 
       return 'r'; 
      case 19: 
       return 's'; 
      case 20: 
       return 't'; 
      case 21: 
       return 'u'; 
      case 22: 
       return 'v'; 
      case 23: 
       return 'w'; 
      case 24: 
       return 'x'; 
      case 25: 
       return 'y'; 
      case 26: 
       return 'z'; 

     } 
    }else{ 
     switch((int)(1 + (Math.random() * 26))){ 

      case 1: 
       return 'A'; 
      case 2: 
       return 'B'; 
      case 3: 
       return 'C'; 
      case 4: 
       return 'D'; 
      case 5: 
       return 'E'; 
      case 6: 
       return 'F'; 
      case 7: 
       return 'G'; 
      case 8: 
       return 'H'; 
      case 9: 
       return 'I'; 
      case 10: 
       return 'J'; 
      case 11: 
       return 'K'; 
      case 12: 
       return 'L'; 
      case 13: 
       return 'M'; 
      case 14: 
       return 'N'; 
      case 15: 
       return 'O'; 
      case 16: 
       return 'P'; 
      case 17: 
       return 'Q'; 
      case 18: 
       return 'R'; 
      case 19: 
       return 'S'; 
      case 20: 
       return 'T'; 
      case 21: 
       return 'U'; 
      case 22: 
       return 'V'; 
      case 23: 
       return 'W'; 
      case 24: 
       return 'X'; 
      case 25: 
       return 'Y'; 
      case 26: 
       return 'Z'; 
     } 
    } 
    return '\0'; 
} 
+0

我刚才提供的答案稍微优雅一些​​。你绝对是在正确的轨道上!字符的好处在于你可以通过增加整数来增加它们,因为内部的字符只是一个荣耀的整数。所以像'a'+ 1这样的东西会返回'b'。 所以你只要将你的int范围转换为0到25而不是1到26,然后将结果添加到字符'a'中。 而且使用java库还可能会有更优雅的东西,但是如果你的目标是自我教学,那么你自己实现它就很棒=) –