2016-10-17 5 views
0

Я пишу программу, которая берет строку, разбивает ее на слова, преобразует слова в pig latin и возвращает строку результата. У меня есть работа над определённым моментом.Pig Latin String Encryption

Например, если я ввожу эти слова, которые не начинаются с гласной в программу я получаю:

свинья -> igpay
мусора -> rashtay
утка -> uckday

(для слов, не начинайте с гласных, их первая буква удаляется, добавляется к концу слова вместе с «ay»)

Он также работает, когда слово начинается с гласного (просто возьмите слово и добавьте " yay "до конца).

Например, если я ввожу эти слова в программу я получаю:

едят -> eatyay
areyay -> areyay
омлета -> omeletyay

Теперь вопрос я имею если я объединю 2 слова, один из которых начинается с гласного, а тот, который этого не делает, печатает оба, как они начинаются с гласных.

Например, если я ввожу эти слова в программу я получаю:

свинью -> 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; 
} 

}

ответ

1

Этот метод:

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

принимает массив слов и одногоisVowel логическое значение. Таким образом, если есть более одного слова, а некоторые, но не все, из них начинаются с гласных, нет способа рассказать об этом методе.

Вам нужно будет изменить определение метода. Либо он должен принять только одно слово String (простейшие), или она должна принять массив isVowel булевых, которые соответствуют массиву слова

Edit: Когда я писал это, я не внимательно посмотреть на остальной части вашего кода. Но метод isVowel имеет ту же проблему: он принимает массив слов, но возвращает одиночный boolean. Это не может работать по той же причине - если некоторые слова начинаются с гласных, а некоторые - нет, что бы вернуть метод?

Если вы можете сделать способ isVowel принять один аргумент String, это было бы проще всего. Затем вы будете называть его несколько раз.Если вы хотите сделать isVowel возвращающие boolean[], метод будет делать что-то вроде

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

создать массив boolean, который имеет такое же количество элементов, как words.

+0

А это имеет смысл. Я просто смущен тем, как писать эту программу. Я должен иметь возвращаемое значение для моего метода «isVowel», но я не уверен, как преобразовать возвращаемое значение в массив для метода «pigLatinEncrypt». –

+0

Я отредактировал свой ответ. – ajb