2016-12-24 97 views
-3

我是Java新手,我試圖解決一個挑戰。我必須寫一些詞,並比較哪一個更長,以及有多少元音的時間越長。另外如果你寫「結束」,寫單詞結束並打印別的東西,在我們的例子中你沒有寫任何單詞如何計算我們的字符串有多少元音?

輸出示例在終端(CMD):

寫字,或寫入「結束」來結束寫作:測試
寫字,或寫入「結束」來結束寫作:三通
寫一個字,或寫「端」結束寫作:測試
寫一個字,或寫「端」結束寫作:年底

字測試是最長的,它有2個元音。

輸出例子,如果你不寫任何字:

寫一個字,或寫「端」結束寫作:
寫一個字,或寫「端」到末寫:
寫一個單詞,或者寫'end'結束寫作:end

你沒寫過任何單詞。

程序應使用Scanner (Input),Switch CaseDo 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-信雅元音或-A-輔音)。 – Emm

+0

@Emi if 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不會被替換。

相關問題