当我创建Java String shuffler时,我遇到了一个问题: 程序卡在某处。
我必须改变单词/句子,以便第一个元素是第一个字母,然后是最后一个字母,然后是第二个字母,然后是结尾的第二个元素,直到作业完成
2.1。如果单词/句子长度为奇数,则必须将中间字符放在单词/句子的末尾。
必须打印出来 结果应该是这样的:
我的代码;
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);
}
请勿查看多行注释,自启动以来尚未对其进行更改。
提前致谢!
答案 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方法需要一些设计 重构。