解开继承的方法(Untangling Inherited Methods)

2019-10-19 01:52发布

好了,这是我第一次实现类,并且一切都乱了。 我implimenting不同的类,PhraseGenerator,而我希望在此定义继承的方法是getPhrase()。 它需要返回theArcha。 相反,在它的工作,我选择了环绕我的工作,它的大括号之后,现在,不管我在哪里把它,不同的错误出现。 处理任何这些之前,我要确保我把它在正确的地方。 据我了解,这将公共.... FROMFILE实现PhraseGenerator中去。 在哪里它应该有什么想法?

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class PhraseGeneratorFromFile implements PhraseGenerator {
    private ParserHelperImpl parserHelper;
    public String getPhrase() {


    public PhraseGeneratorFromFile(String filename) {
        // read file
        StringBuilder fileContent = new StringBuilder();
        BufferedReader br = new BufferedReader(new FileReader(filename));
        try {

            String line = br.readLine();

                while (line != null) {
                fileContent.append(line);
                fileContent.append('\n');
                line = br.readLine();
            }
            String everything = fileContent.toString();
        } finally {
            br.close();
        }


        parserHelper = new ParserHelperImpl();


        List<String> phraseCollection = parserHelper.getPhrases(fileContent,"phrases:");
        String archetype = parserHelper.getRandomElement(phraseCollection);
        boolean flagga = true;
        while(flagga = true){
        Pattern ptrn = Pattern.compile("#[^#]+#");
        Matcher m = ptrn.matcher(archetype);
        String fromMatcher = m.group(0);
        String col = ":";
        String token = fromMatcher+col;
        List<String> pCol = parserHelper.getPhrases(fileContent, token);
        String repl = parserHelper.getRandomElement(pCol);
        String hash = "#";
        String tk2 = hash + token + hash;
        archetype = parserHelper.replace(archetype, tk2, repl);
        flagga = m.find();
        }
        String theArcha = archetype;


            return theArcha;
    }


    }
    }

Answer 1:

而在这里张贴问题一个好的做法是:

(1)。 解释为大家介绍一下想到了你的代码做什么。

(2)。 如果遇到某些错误,在这里复制它们,以便它可以理解什么是你的代码去错了。

我严重不明白你试图实现,但我看到在缺少一个右括号

public String getPhrase()

它应该是 :

public String getPhrase()
 {
 //logic here
 }

希望这可以帮助



Answer 2:

是的,这是在正确的地方,但你缺少收盘} ,这应该在之后直接来到{ 。 你不能把一个方法中那样的另一种方法。

因为要返回theArcha ,则应该让我们称之为“实例变量” -你可能没有听说过这件事? 如果没有,看看它。



Answer 3:

您的界面可能是这样的

interface PhraseGenerator {
String getPhrase(); 
}

然后你写的实现类将采取的形式

class PhraseGeneratorImpl implements PhraseGenerator  {

private ParserHelperImpl parserHelper;


@Override //Used for an overridden or implemented method
public String getPhrase() {
//Put all the code you want to implement here..

//If you want to make use of a helper Class the clean way is to use an instance of it(You tried it with Helper)    
//If you want to make use of a utility method within the same class, 
//say reading something from the file system define a private method below this method
String filePhrase = phraseGeneratorFromFile();
//Now use the filePhrase do do other stuff

}

//
private String phraseGeneratorFromFile(){
//Do all the stuff and return phrase/string so declare return type. you havent done it in the code above
}



}


文章来源: Untangling Inherited Methods