首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猪拉丁字符串加密

猪拉丁字符串加密
EN

Stack Overflow用户
提问于 2016-10-17 01:30:26
回答 1查看 609关注 0票数 0

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

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

猪->火成岩

垃圾-> rashtay

鸭肉->

(对于不以元音开头的单词,他们会删除第一个字母,并在单词末尾加上"ay")。

当单词以元音开头时,它也起作用(只需取单词并在末尾添加"yay“)。

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

吃->餐

耶耶->耶

煎蛋卷->蛋卷

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

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

猪-> pigyay (应该是火柴)

吃->食物(正确)

值得一提的是,在这个程序中需要使用"isVowel“和"pigLatinEncrypt”方法。请忽略程序中的其他方法。

代码语言:javascript
复制
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;
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-17 01:45:24

这种方法:

代码语言:javascript
复制
public static void pigLatinEncrypt(String[] words, boolean isVowel) 

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

您需要更改方法定义。它应该只使用一个单词String (最简单),或者它需要一个与单词数组相对应的isVowel布尔值数组。

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

如果您可以让isVowel方法使用一个String参数,这将是最简单的。那你就叫它好几次了。如果要使isVowel返回一个boolean[],则该方法将执行以下操作

代码语言:javascript
复制
boolean[] result = new boolean[words.length];

若要创建具有与boolean相同数量的元素的words数组,请执行以下操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40077310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档