用Java改组字符串

时间:2016-03-01 08:43:02

标签: java string shuffle

当我创建Java String shuffler时,我遇到了一个问题: 程序卡在某处。

  1. 我必须通过BufferedReader
  2. 传递一个句子或一个单词
  3. 我必须改变单词/句子,以便第一个元素是第一个字母,然后是最后一个字母,然后是第二个字母,然后是结尾的第二个元素,直到作业完成

    2.1。如果单词/句子长度为奇数,则必须将中间字符放在单词/句子的末尾。

  4. 必须打印出来 结果应该是这样的:

    enter image description here

  5. 我的代码;

    public static void main(String[] args) {
        String enteredValue = null;
        int charArrayLength = 0;
    
        System.out.println("Dāvis Naglis IRDBD11 151RDB286");
        System.out.println("input string:");
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            enteredValue = br.readLine();
    
            charArrayLength = enteredValue.length(); // length of array entered
            char[] characters = new char[charArrayLength];
            characters = enteredValue.toCharArray();
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        char[] tempChars = new char[charArrayLength];
        for (int i = 0; i <= charArrayLength - 1; i++) {
            tempChars[i] = enteredValue.charAt(i);
        }
    }
    
    /**
     * Shuffles the char array if it's length is even
     *
     * @param array
     */
    public static void shuffle(char[] array) {
        char[] tempChars = null;
        for (int j = 0; j <= array.length; j++) {
            if ((array.length % 2 == 0) && (j < array.length)) { // array[j] == (array.length / 2) + 1
                tempChars[j] = array[array.length - j];
            } else if (array.length % 2 != 0) {
                tempChars[array.length] = array[j];
            } // end else if
        } // end for
    
        String shuffledSentence = new String(tempChars);
        System.out.println(shuffledSentence);
    }
    

    请勿查看多行注释,自启动以来尚未对其进行更改。

    提前致谢!

3 个答案:

答案 0 :(得分:0)

哇。你的算法对于这个问题太复杂了! 试试这个改组:

int n = array.length;
char[] resChars = new char[n];
boolean flag = false;

if (n % 2 != 0) {
    flag = true;    
    char tmp = array[n / 2];
}

for (int j = 0; j < n - 1; j += 2) {
    resChars[j] = array[j / 2];
    resChars[j + 1] = array[n - 1 - (j / 2)]
} 

if (flag)
    resChars[n - 1] = tmp;

答案 1 :(得分:0)

您可以尝试这样的事情:

String str;
char[] chars = str.toCharArray();
List<Character> list = new ArrayList<>();
for (char aChar : chars) {
    list.add(aChar);
}
Collections.shuffle(list);
String result = list.toString().replaceAll("[\\[\\],]", "");

答案 2 :(得分:0)

你的程序没有卡住,它会正常退出。

  

处理完成,退出代码为0

由于您不打电话,因此无需再为该流程做任何工作 你的静态随机播放方法。

另外,正如其他人已经回答的那样,你的静态shuffle方法需要一些设计 重构。