如何使用Math.random()方法交换句子中的元音



我一直在学习java的在线课程,最近刚刚从课程中抽出时间来制作这个应用程序。该应用程序要求用户输入一个句子,然后输出相同的句子,但所有元音都交换了。我把它设置成这样:

private static char  [] vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}; 
//(no need to worry about y)

然后我有一个方法,从输入句子中提取所有元音,将其添加到不同的数组中,并添加一个空格字符来代替输入句子中不等于元音数组中任何值的任何字符。我这样做是为了在新数组中保持元音处于相同的索引。现在我有一个数组,它的长度与输入句子的长度相同;具有与输入句子相同的元音,并且都在相同的索引处;并用空格替换所有非元音语句值。

因此,如果输入的句子是:

String sentence = "Hey what's up";

迭代语句的数组的输出值为:

[ , e,  ,  ,  ,  , a,  ,  ,  ,  , u,  ]

因此元音的索引为:1,6,11

有什么方法可以把索引和它们所属的值随机化吗?任何关于如何在句子中交换元音的想法都将不胜感激!这是一种迭代输入句子并将该句子的元音添加到新数组中的方法:

public void addVowelArray(String sentence) {
vowelArray = new char [sentence.length()];
for (int i = 0; i < sentence.length(); i ++) {
for (int x = 0; x < vowels.length; x ++) {
if (sentence.charAt(i) == vowels[x]) {
vowelArray [i] = sentence.charAt(i);
}
}
for (int y = 0; y < everyOtherLetter.length; y ++) {
if (sentence.charAt(i) == everyOtherLetter[y]) {
vowelArray[i] = ' ';
}
}
}
//for (int i = 0; i < vowelArray.length; i ++) {
//System.out.print(vowelArray[i]);
//}
System.out.println(java.util.Arrays.toString(vowelArray));
System.out.println(vowelArray[0]);
}

如果我理解你的问题,也许一个更简单的方法是进行

sentence.replace('a', getOtherRandomVowel ());

getOtherRandomVowel方法可以写成

private char getOtherRandomVowel () {
Character  [] vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
List<Character> vl = Arrays.asList(vowels);

Collections.shuffle(vl);
return vl.get(0);
}

编辑

根据您的要求,您可能需要检查返回的字符是否与原始字符不同

最新更新