【问题标题】:Pig Latin String EncryptionPig 拉丁字符串加密
【发布时间】:2016-10-17 01:30:26
【问题描述】:

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

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

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

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

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

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

吃 ->eatyay
areyay -> areyay
煎蛋卷 -> 煎蛋卷

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

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

猪-> 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;
}

}

【问题讨论】:

    标签: java


    【解决方案1】:

    这个方法:

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

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

    您需要更改方法定义。要么只取一个单词String(最简单),要么取一个对应于单词数组的isVowel布尔数组

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

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

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

    创建一个boolean 的数组,该数组与words 具有相同数量的元素。

    【讨论】:

    • 嗯,有道理。我只是对如何编写这个程序感到困惑。我的“isVowel”方法应该有一个返回值,但我不确定如何将返回值转换为“pigLatinEncrypt”方法的数组。
    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多