gpt4 book ai didi

java - Pig Latin 字符串加密

转载 作者:行者123 更新时间:2023-12-01 09:22:34 24 4
gpt4 key购买 nike

我正在编写一个程序,它接受一个字符串,将其拆分为单词,将单词转换为 pig 拉丁语,然后返回结果字符串。我已经让它工作到一定程度了。

例如,如果我在程序中输入这些不以元音开头的单词,我会得到:

pig -> igpay
垃圾 -> rashtay
鸭子 -> uckday

(对于不以元音开头的单词,它们的第一个字母会被删除,并与“ay”一起添加到单词的末尾)

当单词以元音开头时它也适用(只需在单词中添加“yay”到末尾即可)。

例如,如果我在程序中输入这些单词,我会得到:

吃 -> eatyay
阿雷亚 -> 阿雷亚
煎蛋卷 -> omeletyay

现在我遇到的问题是,如果我组合两个单词,一个以元音开头,一个不以元音开头,它会打印出两个单词,就像它们都以元音开头一样。

例如,如果我在程序中输入这些单词,我会得到:

Pig -> Pigyay(应该是igpay)
吃 -> eatyay(正确)

值得一提的是,该程序中需要使用“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;
}

}

最佳答案

这个方法:

public static void pigLatinEncrypt(String[] words, boolean isVowel) 

接受一个单词数组和一个单个 isVowel boolean 值。因此,如果有多个单词,并且其中一些(但不是全部)以元音开头,则无法告诉该方法这一点。

您需要更改方法定义。它要么只接受一个单词String(最简单),要么需要接受与单词数组相对应的一组isVowel boolean 值

编辑:当我写这篇文章时,我没有仔细查看你的其余代码。但 isVowel 方法也有同样的问题:它接受一个单词数组,但返回一个单个 boolean 值。出于同样的原因,这是行不通的——如果某些单词以元音开头,而另一些则不是,该方法会返回什么?

如果您可以使 isVowel 方法采用单个 String 参数,那就最简单了。然后你会多次调用它。如果您想让 isVowel 返回一个 boolean[],该方法会执行类似的操作

boolean[] result = new boolean[words.length];

创建一个 boolean 数组,其元素数量与 words 相同。

关于java - Pig Latin 字符串加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com