1

我在弄清楚如何从随机字母中制作回文生成器时遇到了一些麻烦。例如 asdffdsa、kiutgtuik。我需要输入大小并使用它来制作回文。我已经有一些代码,只是好奇你能否帮助我指出正确的方向。我也想尝试不为此使用数组。

import java.util.Random;

public class PP425 {
    public static String generatePalindrome (int size) {
        Random rand = new Random();
        char ch = (char)(rand.nextInt(26) + 97);
        String random = "";
        for (int i = 0; i < size; i++) {

        }


        return random;
    }
    public static void main(String[] args) {
        System.out.println(generatePalindrome(3));
    }
}
4

3 回答 3

1

创建一个char[]大小K。生成random()0 到 25 之间的数字并添加“a”。现在,无论您生成什么字符,只需将其放入beginend增加begin、减少end。这样做直到begin <= end.

public static String fun(int k){
        long seed = System.currentTimeMillis();
        Random random1 = new Random(seed);
        char[] a = new char[k];
        int begin=0, end=k-1;
        while(begin<=end){
            char c = (char)(random1.nextInt(26)+'a');
            a[begin]=c;
            a[end]=c;
            begin++;end--;
        }
        return String.valueOf(a);
    }
于 2013-11-13T23:57:12.330 回答
0

这是你想要的吗?如果是长尺寸,请使用 StringBuilder 而不是 String。

import java.util.Random;

public class PP425 {
    public static String generatePalindrome (int size) {
        Random rand = new Random();
        StringBuilder random = new StringBuilder(size);
        for (int i = 0; i < (int)Math.ceil((double)size/2); i++) {
            char ch = (char)(rand.nextInt(26) + 97);
            random.append(ch);
        }
        for(int i = size/2-1; i >= 0; i--)
            random.append(random.charAt(i));

        return random.toString();
    }
    public static void main(String[] args) {
        System.out.println(generatePalindrome(3));
    }
}    
于 2013-11-13T23:44:57.593 回答
0

调用random.nextInt()不应放在for循环之外,而应放在循环内部。您不一定需要使用数组。您可以简单地连接Strings (或StringBuilder改用)。

for循环中,您将构建回文的前半部分。然后,您可以使用该StringBuilder.reverse方法生成后半部分。

如果您的尺码是奇数,请注意中间的字母!

此外,您的for循环应该只运行到大小的一半。或 (size - 1) / 2,如果大小是奇数。

于 2013-11-13T23:47:50.793 回答