好的,该类的目标是重写Enumeration对象类内部的两个方法。我相信我的hasNextElement()方法应该可以工作,对此的任何指针将不胜感激。但是,我在nextElement()方法上遇到麻烦。请原谅该类中的注释不当,但nextElement()的目标是一次返回一个字符。我发现它只是一个简单的循环,但是netBeans一直给我不兼容的dataTypes,这是有道理的,因为它是String方法而不是Char方法。所以我将其更改为char并且得到

nextElement() in StringEnumeration cannot implement nextElement() in Enumeration return type char is not compatible with String where E is a type-variable:


任何帮助将不胜感激。记得我是一名初学者程序员,所以我做错了一些容易修复的错误。

public class StringEnumeration implements Enumeration<String> {

    public String value;

    public StringEnumeration(String initialValue) throws InvalidStringException {
        if (initialValue == null || initialValue.length() == 0) {
            throw new InvalidStringException("initialValue is either null or 0");
        }

        this.value = initialValue;
    }

    @Override
    public boolean hasMoreElements() {
        return value.length() != 0 || value != null;
    }

    @Override
    public String nextElement() {
        StringBuffer test = new StringBuffer(value);
        for (int i = 0; i < value.length(); i++) {
            return test.charAt(i);
        }

    }
}

最佳答案

最简单的方法是将您所在的索引作为枚举变量保留:

// we return characters
public class StringEnumeration implements Enumeration<Character> {
    // the value
    private String value;
    // current index
    private int idx=0;

    public StringEnumeration(String initialValue) throws IllegalArgumentException {
        if (initialValue == null || initialValue.length() == 0) {
            throw new IllegalArgumentException("initialValue is either null or 0");
        }

        this.value = initialValue;
    }

    @Override
    public boolean hasMoreElements() {
        // can we still read
        return idx<value.length();
    }

    @Override
    public Character nextElement() {
        // get current char and increment index
        return value.charAt(idx++);
    }
}

10-08 19:10