如何在不使用循环的情况下搜索字符串中的字符?

时间:2017-12-13 00:53:14

标签: java if-statement user-defined

我的作业是:如果用户输入的单词没有元音,那么“ay”被添加到结尾,如果它以元音开头,那么它将“yay”添加到结尾,否则如果它不符合任何这些条件然后第一个字母移动到单词的末尾,“ay”被添加到结尾。我似乎无法获得最后的工作条件。例如,单词“sad”应该输出“adsay”,而是输出“saday”,这意味着它正在阅读并接受另一个if语句。我试图查找一些解决方案,但我得到的只是循环,我想避免这个特定任务的循环。这是我的代码:

import java.util.Scanner;
class Main {
 public static void main(String[] args) {
   Scanner in = new Scanner(System.in);
   System.out.print("Word: ");
   String word = in.nextLine();
   int length = word.length();
   String word1 = "";

   if (word.charAt(0) == 'a' || word.charAt(0) == 'e' || word.charAt(0) == 'i' || word.charAt(0) == 'o' || word.charAt(0) == 'u')
   {
     word1 = pigLatin(word);
     System.out.println("Pig Latin: " + word1);
   }
   else if (word.indexOf("a") == -1 || word.indexOf("e") == -1 || word.indexOf("i") == -1 || word.indexOf("o") == -1 || word.indexOf("u") == -1)
   {
     word1 = pigLatin1(word);
     System.out.println("Pig Latin: " + word1);
   }
   else
   {
     word1 = pigLatin2(word);
     System.out.println("Pig Latin: " + word1);
   }
 }
 static String pigLatin(String word)
 {
   String x = word + "yay";
   return x;
 }
 static String pigLatin1(String word)
 {
   String x = word + "ay";
   return x;
 }
 static String pigLatin2(String word)
 {
   char firstLetter = word.charAt(0);
   String x = word.substring(1, word.length()) + firstLetter + "ay";
   return x;
 }
}

1 个答案:

答案 0 :(得分:1)

问题在于你的第二个if声明:

else if (word.indexOf("a") == -1 || word.indexOf("e") == -1 || word.indexOf("i") == -1 || word.indexOf("o") == -1 || word.indexOf("u") == -1)
{
    word1 = pigLatin1(word);
    System.out.println("Pig Latin: " + word1);
}

因为你在这里使用“或”(||运算符),只要单词不包含“a”,,你的程序就会进入此块不包含“e”等。对于您的测试输入,“sad”包含“a”但不包含“e”...所以最终调用pigLatin1("sad")

将此if更改为使用“和”(&&运算符)。这样,单词将不需要每个定义的元音,而不是没有至少一个定义的元音。

else if (word.indexOf("a") == -1 && word.indexOf("e") == -1 && word.indexOf("i") == -1 && word.indexOf("o") == -1 && word.indexOf("u") == -1)