2016-12-24 33 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不会被替换。

相关问题