如何让洗牌器方法只洗牌数组中的某些索引?虽然不改组我想保持不变的索引
How can I get the shuffler method to only shuffle certain indexes in an array? While not shuffling indexes which I want to stay the same
我的问题如下:
char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};
for(int i = 0; i < letters.length; i ++) {
int random = (int) (Math.random()* letters.length);
char temp = letters[i];
letters [i] = letters [random];
letters [random] = temp;
}
这个方法打乱了数组,很好;但是我希望 shuffle 方法和 Math.random 方法都忽略空格,并且只随机播放具有字母值的索引。进一步解释:我希望 letters 数组的输出具有与原来相同的索引处的所有空格,同时只允许交换包含字母的索引。因此,通过此方法后字母数组的随机可接受输出示例如下所示:
[ ' ', 'b', ' ', 'c', ' ', 'a' ]
甚至可能
[ ' ', 'c', ' ', 'a', ' ', 'b' ]
任何关于我如何实现这一点的帮助都绝对是太棒了……我已经尝试了 for、while 和 if 循环的每一种变体,试图将 Math.random 方法的边界限制为仅索引包含一个字母,for 循环也是如此,但我什么也没想到。它打败了我。非常感谢任何可以帮助我并解释一下的人。
使用以下逻辑:
char[] letters = { ' ', 'a', ' ', 'b', ' ', 'c', ' ', 'd' };
for (int i = 0; i < letters.length; i++) {
int random = (int) (Math.random() * letters.length);
// observe this
if (!Character.isWhitespace(letters[random]) && !Character.isWhitespace(letters[i])) {
char temp = letters[i];
letters[i] = letters[random];
letters[random] = temp;
}
}
解释:
- 您可以添加一个简单的
if
条件来检查要交换的两个元素(即 letters[random]
和 letters[i]
)是否不是 whitespaces.
只需跳过空白索引:
char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};
for(int i = 0; i < letters.length; i++) {
int random = (int) (Math.random()* letters.length);
if (letters[random] == ' ' || letters[i] == ' ') continue; // here
char temp = letters[i];
letters [i] = letters [random];
letters [random] = temp;
}
我的问题如下:
char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};
for(int i = 0; i < letters.length; i ++) {
int random = (int) (Math.random()* letters.length);
char temp = letters[i];
letters [i] = letters [random];
letters [random] = temp;
}
这个方法打乱了数组,很好;但是我希望 shuffle 方法和 Math.random 方法都忽略空格,并且只随机播放具有字母值的索引。进一步解释:我希望 letters 数组的输出具有与原来相同的索引处的所有空格,同时只允许交换包含字母的索引。因此,通过此方法后字母数组的随机可接受输出示例如下所示:
[ ' ', 'b', ' ', 'c', ' ', 'a' ]
甚至可能
[ ' ', 'c', ' ', 'a', ' ', 'b' ]
任何关于我如何实现这一点的帮助都绝对是太棒了……我已经尝试了 for、while 和 if 循环的每一种变体,试图将 Math.random 方法的边界限制为仅索引包含一个字母,for 循环也是如此,但我什么也没想到。它打败了我。非常感谢任何可以帮助我并解释一下的人。
使用以下逻辑:
char[] letters = { ' ', 'a', ' ', 'b', ' ', 'c', ' ', 'd' };
for (int i = 0; i < letters.length; i++) {
int random = (int) (Math.random() * letters.length);
// observe this
if (!Character.isWhitespace(letters[random]) && !Character.isWhitespace(letters[i])) {
char temp = letters[i];
letters[i] = letters[random];
letters[random] = temp;
}
}
解释:
- 您可以添加一个简单的
if
条件来检查要交换的两个元素(即letters[random]
和letters[i]
)是否不是 whitespaces.
只需跳过空白索引:
char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};
for(int i = 0; i < letters.length; i++) {
int random = (int) (Math.random()* letters.length);
if (letters[random] == ' ' || letters[i] == ' ') continue; // here
char temp = letters[i];
letters [i] = letters [random];
letters [random] = temp;
}