2013-10-11 80 views
0

我必須做一個java實驗室,它將輸入一個句子並創建一個只包含以元音開頭的單詞的新字符串。執行簡單字符串操作的Java程序無法正常工作

實施例:

輸入:它是一個熱和潮溼的夏天。

輸出:Itisaand。

編輯:我得到的輸出是anananananan。

這是我的代碼(帶註釋)。這些方法非常簡單。我只是不知道爲什麼這不起作用。

import java.util.*; 

public class Driver { 

    public static void main(String[] args) { 
     Scanner console = new Scanner(System.in); 
     System.out.print("Input: "); 
     String input = console.nextLine(); 
     Class strings = new Class(input); 
     // class has constructor for input 
     int beg = 0, end = 0; 
     for (int j = 0; j < input.length(); j++) { 
      if (strings.isVowel(j) && (input.charAt(j - 1) == ' ' || j == 0)) 
       beg = j; 
      // isVowel finds if there is a vowel at the location 
      else if (strings.endWord(j)) 
       end = j - 1; 
      // endWord finds if there is a space or punctuation at the location 

      if (beg == end - 2) 
       strings.findWord(beg, end); 
      // findWord adds a substring of input from beg to end to the answer 
     } 
     System.out.print("\nOutput: "); 
     strings.printAnswer(); 
     // printAnswer prints the answer 
    } 
} 

編輯:這是我的班的代碼。

public class Class { 

    String input = "", answer = ""; 

    public Class(String input1) { 
     input = input1; 
    } 

    public boolean isVowel(int loc) { 
     return (input.charAt(loc) == 'a' || input.charAt(loc) == 'e' || input.charAt(loc) == 'i' 
       || input.charAt(loc) == 'o' || input.charAt(loc) == 'u'); 
    } 

    public boolean endWord(int loc) { 
     return (input.charAt(loc) == ' ' || input.charAt(loc) == '.' || input.charAt(loc) == '?' 
       || input.charAt(loc) == '!'); 
    } 

    public void findWord(int beg, int end) { 
     answer = answer + (input.substring(beg, end)); 
    } 

    public void printAnswer() { 
     System.out.println(answer + "."); 
    } 

} 
+3

感謝您發佈預期的輸出,但是您的*實際*輸出是什麼? – Bucket

+0

嗨安東尼,歡迎來到堆棧溢出。我建議你閱讀:http://stackoverflow.com/help/how-to-ask在發佈下一次(標題)之前,無需事先感謝用戶:) – bjedrzejewski

+0

是'Class'你自己的課程?如果是這樣,將它添加到頂部的'import',因爲它可能與'java.lang.Class'混淆。 –

回答

0

可能有其他的問題,但與邏輯的最直接的問題是這一部分:

if(beg==end-2) 
    strings.findWord(beg, end); 

這將只承認兩個字符的話,那麼將不匹配「一」或「和「即使他們是有效的。

0

我不會爲你寫java代碼,但會給你遵循的邏輯步驟。

while(true) 
    start = input.indexOf(" ") 
    if(start == -1) 
     break 
    end = input.index of(" ", start) 
    if(end == -1) 
     word = input.substr(start, input.length-1) 
    else 
     word = input.substr(start, end) 
    if first letter of word is a vowel 
     save it 
    if(end == -1) 
     break 

你的邏輯是絕對正確的,但不是打算要解決這個問題

編輯的最佳方式:

爲您但是解決方法很簡單。

你可以做

if(beg < end) 

事情一切正常。

+0

我可能應該提到這一點,但爲了完成作業,我們需要使用我在課堂上編寫的方法。這似乎是做這件事的合乎邏輯的方法,但那不是任務。 –

+0

我做了這個改變的代碼,現在我的輸出是: Iia hoananananananand humiand humiand humiand humiand humiand humiand humiand humiand潮溼的夏季潮溼的夏季潮溼的夏季潮溼的夏季潮溼的夏季達。 –