【发布时间】:2016-03-01 08:43:02
【问题描述】:
在创建 Java 字符串洗牌器时,我遇到了一个问题: 程序卡在某个地方。
- 我必须通过 BufferedReader 传递一个句子或一个单词
-
我必须对单词/句子进行洗牌,以便第一个元素是第一个字母,然后是最后一个字母,然后是第二个字母,然后是从末尾开始的第二个直到工作完成
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);
}
不要看多行cmets,从一开始就没有改过。
提前致谢!
【问题讨论】:
-
请在问题中包含代码,而不是提供指向它的链接。
-
一定要用char数组吗?
-
shuffle永远不会被调用,如果你调用它,它会立即崩溃并出现空指针异常,因为tempChars(在shuffle内)从未被初始化。 -
如果您的算法卡住了,请在调试器中运行代码并暂停它,这将向您显示卡在哪里,如果然后单步执行代码,您将了解原因。
-
@ammoQ 看到..做了很多版本的代码。这是我在利用 StackOverFlow 之前的最后一次尝试,似乎我已经忘记了......我会做出这些改变,然后我会提交一个答案!