2016-12-24 9 views
-3

Я новичок в Java, и я пытаюсь решить проблему. Я должен написать несколько слов и сравнить, какой из них длиннее, и сколько гласных - дольше. Также, если вы пишете «конец», записываете слова до конца и печатаете что-то еще, в нашем случае Вы не написали ни одного слова.Как подсчитать, сколько гласных имеет наша строка?

Выход Пример в терминале (ЦМД):

Написать слово, или написать «конец», чтобы закончить запись: Тест
Написать слово, или написать «конец», чтобы закончить запись: тройник
Написать слово, или написать «конец», чтобы закончить запись: тестирование
Написать слово, или написать «конец», чтобы закончить запись: конец

тестирование слова является самым длинным и иметь 2 гласные.

Выходной пример, если вы не написать ни одного слова:

Напишите слово или написать «конец», чтобы закончить написание:
Написать слово, или написать «конец» в конец записи:
Напишите слово или напишите 'end' до конца записи: end

Вы ничего не написал.

Программа должна быть закодированы с использованием Scanner (Input), Switch Case и Do While. Строки следует сравнивать с использованием метода equalsIgnoreCase().

Я пробовал много раз, и то, что я сделал, это только письмо и удаление кода.

Это мой код:

import java.util.Scanner; 

public class VowelFinder { 

public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 

     String word = null; 
     int num = 0; 
     String max = null; 
     final String SENTINEL = "end"; 

     System.out.println(" "); 

     do { 
      System.out.print("Write a word, or write `" + SENTINEL + "` to end writing: "); 
      word = scan.nextLine(); 
      if(!word.equalsIgnoreCase(SENTINEL)) { 

       int nr = countVowels(word); 
       if (num <= nr) { 
        num = nr; 
        max = word; 
       } 
      } 
     } while (!word.equalsIgnoreCase(SENTINEL)); 

     if (max != null) { 
      System.out.println(" "); 
      System.out.println("Word `" + max + "` is longest word, and countains " + num + " vowels."); 
     } 
     else { 
      System.out.println(" "); 
      System.out.println("You din't wrote any word !"); 
     } 

} 


private static int countVowels(String word) { 
    int counter = 0; 
    int vowels = 0; 

    while(counter < word.length()){ 
     char ch = word.charAt(counter++); 


     switch (ch) { 
      //Lower Case 
      case 'a': 
      case 'e': 
      case 'i': 
      case 'o': 
      case 'u': 
      case 'y': 
      //Upper Case 
      case 'A': 
      case 'E': 
      case 'I': 
      case 'O': 
      case 'U': 
      case 'Y': 
      vowels++; 

      default: 
      // do nothing 
     } 
    } 
    return vowels; 
} 

} 

Проблема:

Когда я делаю это в терминале (CMD)

Написать слово, или написать «конец ', чтобы закончить запись:
Напишите слово или напишите' end 'до конца записи:
Написать слово, или написать «конец», чтобы закончить запись: конец

Он печатает меня Слово «» является самым длинным словом, и countains 0 гласные., но он должен напечатать Вы ничего не написал.

Может кто-нибудь мне помочь? Где я ошиблась?

Оно должно напечатать меня Вы не написали ни слова, если я не пишу ни слова.

Надеюсь, я был чист, и вы можете мне помочь. Если я не понял, спросите меня.

Спасибо за ваш вклад.

+0

@Jobin [Вот почему я поставил Y] (https://en.oxforddictionaries.com/explore/is-the- письмо-я-гласный или-а-согласные). – Emm

+0

@Emi try if (max! = Null && max! = "") {} – RohitS

+0

@ тогда вы должны попробовать (string.equals (null) && string.equals (""))) – RohitS

ответ

1

Я сделал некоторые изменения, и она работала для меня ...

if (max != null && !max.trim().isEmpty() && max.length()>0) { 
      System.out.println(" "); 
      System.out.println("Word `" + max + "` is longest word, and countains " + num + " vowels."); 
     } 
+0

Кроме того, он работает только в том случае, если я использую 'if (max.length()> 0)' – Emm

+0

Да, он будет просто добавлен, чтобы гарантировать, что он не исчезнет из каких-либо пробелов. Также предлагается другим пользователем ...: D – RohitS

+0

, если он будет разрешен ваша проблема рассматривает маркировку как ответ. – RohitS

2

Изменение если условие

if (word != null && !"".equals(word.trim()) && !word.equalsIgnoreCase(SENTINEL))

Я добавил null чек и сделал trim, чтобы удалить пробелы.

+0

Это также работает. – Emm

0

Вы можете указать countVowels(), является ли текущее слово ничем.

private static int countVowels(String word) { 
    int counter = 0; 
    int vowels = 0; 
    if(word.length() == 0){ 
     return -1; 
    } 
    ... 
} 

Возвращаемое значение меньше 0, поэтому max не будет заменено.

 Смежные вопросы

  • Нет связанных вопросов^_^