Search code examples
javaif-statementuser-defined

How can I search for a character in strings without using a loop?


My assignment is: if the user-inputted word has no vowels, then "ay" is added to the end, if it starts with a vowel then it adds "yay" to the end, otherwise if it doesn't meet any of these conditions then the first letter gets moved to the end of the word and "ay" is added to the end. I can't seem to get the last condition to work. For example the word "sad" should output "adsay" but instead it outputs "saday" which means that it is reading and accepting another if statement. I've tried to look up some solutions but all I've gotten are loops and I'd like to avoid loops for this particular assignment. Here is my code:

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

Solution

  • The problem lies in your second if statement:

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

    Because you're using "or" here (the || operator), your program will enter this block as long as the word doesn't contain "a", or doesn't contain "e", etc. For your test input, "sad" contains "a" but it doesn't contain "e"... so you wind up calling pigLatin1("sad").

    Change this if to use "and" instead (the && operator). That way, the word will need to not have every defined vowel, instead of not having at least one defined vowel.

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