2014-04-14 19 views
0

我遇到問題,爲什麼我的setMethod無法正常工作。當我使用它時,我的主要方法不顯示任何正確的答案。我最初使用一個用戶輸入到我的StringProcessor str = new StringProcessor(輸入),它完美的工作。我只是不知道爲什麼我不能讓它工作,如果我沒有在我的新對象的輸入,並使用set字符串來創建我的字符串。任何幫助都會很棒。謝謝。文本處理器分配setString方法java

import java.util.*; 
public class StringProcessor { 
private String noSpaces, string; 
private String input, noVowels; 
private String noDigitWords; 
private int numOfWords = 0, uppercaseLetters = 0, 
      numOfDigits = 0, digitWords = 0; 
private String [] wordDigits = {"zero","one", "two", "three","four", 
     "five", "six", "seven", "eight", "nine"}; 
private String [] digits = {"0", "1", "2", "3", "4", 
     "5", "6", "7", "8", "9"}; 


public StringProcessor() 
{ 
    string = (""); 
} 

public StringProcessor(String s) 
{ 
    StringTokenizer one = new StringTokenizer(s); 
    StringTokenizer str = new StringTokenizer(s); 
    numOfWords = str.countTokens(); 

    for (int i = 0; i < s.length(); i++) 
    { 
     if (Character.isUpperCase(s.charAt(i))) 
      uppercaseLetters++; 
    } 

    for (int i = 0; i < s.length(); i++) 
    { 
     if (Character.isDigit(s.charAt(i))) 
      numOfDigits++; 
    } 

    String [] strSplit = s.split(" "); 
    for(int i = 0; i < strSplit.length; i++) 
    { 
     for (int j = 0; j < wordDigits.length; j++) 
     { 
      if (strSplit[i].equalsIgnoreCase(wordDigits[j])) 
        digitWords++; 
     } 
    } 


    noSpaces = s.replace(" ",""); 
    noVowels = s.replaceAll("[aeiou]", "-"); 

    noDigitWords = s; 
    for(int i = 0; i < 10; i++) 
    { 
     noDigitWords = noDigitWords.replace(wordDigits[i], digits[i]); 
    } 
} 

public void setString(String s) 
{ 
    string = s; 
} 

public String getString() 
{ 
    return string; 
} 

public int wordCount() 
{ 
    return numOfWords; 
} 

public int uppercaseCount() 
{ 
    return uppercaseLetters; 
} 

public int digitCount() 
{ 
    return numOfDigits; 
} 

public int digitWordCount() 
{ 
    return digitWords; 
} 

public String getNoSpaceString() 
{ 
    return noSpaces; 
} 

public String getNoVowelString() 
{ 
    return noVowels; 
} 

public String getNoDigitWordString() 
{ 
    return noDigitWords; 
} 

公共靜態無效的主要(字串[] args) {

StringProcessor str = new StringProcessor(); 
    str.setString("my string"); 
    System.out.println(str.getString()); 

    System.out.println("words: " + str.wordCount()); 
    System.out.println("uppercase: " + str.uppercaseCount()); 
    System.out.println("digits: " + str.digitCount()); 
    System.out.println("digit words " + str.digitWordCount()); 
    System.out.println("line with no spaces: " + str.getNoSpaceString()); 
    System.out.println("line with vowels replaced: " + str.getNoVowelString()); 
    System.out.println("line with digit words replaced: " + str.getNoDigitWordString()); 
} 

}

回答

1

的問題是,當你構建具有字符串參數的StringProcessor所有的計算完成:

StringProcessor str = new StringProcessor("some string"); 

但是你沒有使用該構造函數;你只使用不帶參數的構造函數。因此,執行所有計算的代碼永遠不會被執行。

將計算移至私有方法。然後有一個參數構造函數和setString調用該方法。 (並確保setString或您的私有方法將所有計數重新初始化爲0,以便如果您多次設置setString,則這些值將是正確的,而不是累計值。)

+0

我列出的方法是我的方法應該用在我的任務中。我應該複製一種方法中的所有工作,然後將其粘貼到另一個方法中? – user3242607

+0

@ user3242607我還沒有看到這個任務,但「你應該使用的方法」可能是** public **方法,需要在你的類中可用於該類之外的其他類。私人方法只是一種幫助實施公共方法的「幫手」方法。我看不出你的教練如何反對,但如果他們這樣做,那麼我認爲剪切和粘貼會起作用。這是一個可怕的編程習慣,但說你不能使用私有方法將是一個可怕的限制。 – ajb