Зачем использовать логическую переменную в этом коде? - PullRequest
0 голосов
/ 08 ноября 2018

Я новичок в Java, и у нас было задание в нашем классе, которое я не делаю вполне понятно.

Программа должна переводить введенные слова в Pig Latin. Таким образом, каждое слово, начинающееся с гласного, должно отображаться как «word + lay», а каждое слово, начинающееся с согласного, должно отображаться как «word_without_the_consonant_at_the_beginning + consonant + ay».

Моя проблема в том, что я не понимаю, зачем это нужно быть включенным Может кто-нибудь объяснить это мне? Тем более что я уже ввел эти переменные в начале кода.

        firstVowelFound = false;
        firstIndex = 0;       

Зачем мне нужен FirstVowelFound в этом случае? И почему я должен включить это здесь:

      while ((firstIndex < scannedWords.length()) && !firstVowelFound)

Это код, исправленный учителем. Те, что выделены жирным шрифтом те, которые Я не понимаю. Надеюсь, вы можете помочь мне. Спасибо!!

import java.util.Scanner;


public class PigLatin2
{

  public static void main(String[] args)
  {
    Scanner keyboard = new Scanner(System.in);
    Scanner wordScanner;

    String
      wordInput = "",
      scannedWords = "",
      pigLatinWord = "";

    int
      firstIndex = 0;

    char
      firstLetter;

    boolean
      firstVowelFound = false;

    while (keyboard.hasNextLine()) //as long as there is input, read input.
    {
      wordInput = keyboard.nextLine().toLowerCase();
      wordScanner = new Scanner(wordInput);

      while (wordScanner.hasNext()) //read input to find out the words
      {
        scannedWords = wordScanner.next();

        **firstVowelFound = false;
        firstIndex = 0;    


        //for the following part, the program looks for the first Index of 
        //each word. If the letters of switch are included, boolean is 
        //true.

        while ((firstIndex < scannedWords.length()) && !firstVowelFound)**
        {
          firstLetter = scannedWords.charAt(firstIndex);

          switch (firstLetter)
          {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
              **firstVowelFound = true;**
              break;

            default: 
              // no vowel occurred in the word, so look for more words.
              firstIndex++;
          }
         }
        /*the following parts create pigLatin Words. When index is 0, all 
          words starting with a vowel will be word + lay, any other word 
          will display word with the first letter + ay displayed at the end 
          of the word */ 

        if (firstIndex == 0)
        {
          pigLatinWord = scannedWords + "lay";
        }
        else
        {
          pigLatinWord = scannedWords.substring(1) + 
          scannedWords.substring(0,1) + "ay";
        }
      }
      System.out.println("Pig Latin for your entered word is " + 
      pigLatinWord + 
      " ");
    }

  }
}

1 Ответ

0 голосов
/ 08 ноября 2018

firstVowelFound существует, чтобы гарантировать, что цикл while прерывается, когда найден первый гласный. На самом деле без этого цикл был бы бесконечным.

Вероятно, запутанная вещь в коде - break внутри switch. Это не заставляет программу выходить из цикла while, а только за пределами коммутатора.

...