我正在编写一个程序,该程序接受一个字符串,将其拆分为单词,将单词转换为pig拉丁语,然后返回结果字符串。我让它在一定程度上起作用。
例如,如果我在程序中输入了这些不以元音开头的单词,就会得到:
猪->火成岩
垃圾-> rashtay
鸭肉->
(对于不以元音开头的单词,他们会删除第一个字母,并在单词末尾加上"ay")。
当单词以元音开头时,它也起作用(只需取单词并在末尾添加"yay“)。
例如,如果我在程序中输入这些单词,就会得到:
吃->餐
耶耶->耶
煎蛋卷->蛋卷
现在我遇到的问题是,如果我组合两个单词,一个以元音开头,另一个不以元音开头,它会打印出两个单词,就像它们都以元音开头一样。
例如,如果我在程序中输入这些单词,就会得到:
猪-> pigyay (应该是火柴)
吃->食物(正确)
值得一提的是,在这个程序中需要使用"isVowel“和"pigLatinEncrypt”方法。请忽略程序中的其他方法。
public static void main(String[] args) {
// TODO code application logic here
String input, message;
int ans1, ans2, key;
input = JOptionPane.showInputDialog("1. to decrypt a message\n2. to encrypt a message");
ans1 = Integer.parseInt(input);
input = JOptionPane.showInputDialog("1. for an entire message reversal encryption\n"
+ "2. for a Pig-Latin encryption\n3. for a simple Caesar style encryption");
ans2 = Integer.parseInt(input);
if (ans2 == 3) {
input = JOptionPane.showInputDialog("Please enter a key for encryption");
key = Integer.parseInt(input);
}
input = JOptionPane.showInputDialog("Please enter the message to encrypt or decrypt");
message = input;
if (ans2 == 1) {
reverseEncryptandDecrypt(message);
}
if (ans2 == 2) {
String[] words = message.split(" ");
if (ans1 == 2) {
boolean isVowel = isVowel(words);
pigLatinEncrypt(words, isVowel);
}
if (ans1 == 1) {
pigLatinDecrypt(message);
}
}
}
public static void reverseEncryptandDecrypt(String message) {
char[] stringToCharArray = message.toCharArray();
System.out.print("You entered the message: ");
for (char c : stringToCharArray) {
System.out.print(c);
}
int i = stringToCharArray.length - 1, j = 0;
char[] reverse = new char[stringToCharArray.length];
while (i >= 0) {
reverse[j] = stringToCharArray[i];
i--;
j++;
}
System.out.print("\n\nThe result is: ");
for (char c : reverse) {
System.out.print(c);
}
System.out.println();
}
public static void pigLatinEncrypt(String[] words, boolean isVowel) {
for (String word : words) {
if (isVowel == true) {
System.out.print(word + "yay ");
} else {
System.out.print(word.substring(1) + word.substring(0, 1) + "ay ");
}
}
}
public static boolean isVowel(String[] words) {
boolean isVowel = false;
for (String word : words) {
if (word.startsWith("a") || word.startsWith("e") || word.startsWith("i") || word.startsWith("o")
|| word.startsWith("u")) {
isVowel = true;
}
}
return isVowel;
}}
发布于 2016-10-17 01:45:24
这种方法:
public static void pigLatinEncrypt(String[] words, boolean isVowel) 接受一个单词数组和一个isVowel布尔值。因此,如果有多个单词,其中一些(但不是全部)以元音开头,就无法告诉方法。
您需要更改方法定义。它应该只使用一个单词String (最简单),或者它需要一个与单词数组相对应的isVowel布尔值数组。
编辑:,当我写这篇文章时,我没有仔细地查看您的其余代码。但是isVowel方法也有同样的问题:它需要一个单词数组,但返回一个布尔值。由于同样的原因,这是行不通的--如果一些单词以元音开头,而另一些则没有,那么这个方法会返回什么结果?
如果您可以让isVowel方法使用一个String参数,这将是最简单的。那你就叫它好几次了。如果要使isVowel返回一个boolean[],则该方法将执行以下操作
boolean[] result = new boolean[words.length];若要创建具有与boolean相同数量的元素的words数组,请执行以下操作。
https://stackoverflow.com/questions/40077310
复制相似问题