简单的方法调用在java中不起作用

时间:2017-04-05 13:01:46

标签: java

这是一个练习,我被要求编写方法charAt()length() startsWith()并在main函数中调用这些方法。

预期输出应为

  

ABCDE

     

c 5

出于某种原因,我不知道它是不是打出那些输出,我无法调用startsWith()方法。

问题(1)我无法调用方法startsWith()

问题(2)当我注释掉startsWith()而不是

时编译

它只打印字母而不是索引和长度。

public interface CSequence {
    char charAt(int n);
    int length();
}
class ImmutableCSequence implements CSequence {
    private char[] chars;
    public ImmutableCSequence(char[] chars) {
        this.chars = new char[chars.length];
        for (int pos = 0; pos < chars.length; pos++)
            this.chars[pos] = chars[pos];
    }
    public boolean startsWith(char c) {
        boolean b = false;
        if (this.chars.length > 0 && c == this.chars[0])
            b = true;
        return b;
    }
    public String toString() {
        return new String(this.chars);
    }

    public char charAt(int n) {
        for(int i = 0; i < chars.length; i++){
            i=(char) n;
        }
        return (char)n;
    }

    public int length() {
        return this.chars.length;
    }
    public static void main(String[] args) {
        char[] letters = {'a', 'b', 'c', 'd', 'e'};
        CSequence cs = new ImmutableCSequence(letters);
        System.out.println(cs);
        char c = cs.charAt(2);
        int len = cs.length();
        System.out.println(c + " " + len);
        //boolean b = cs.startsWith('a');
    }
}

1 个答案:

答案 0 :(得分:1)

引用cs的类型为CSequence,但它只能 激活接口CSequence中的方法(方法charAt和length)。 它无法激活方法startsWith

可以使用typ startWith的引用激活方法ImmutableCSequence

 public static void main(String[] args) {
    char[] letters = {'a', 'b', 'c', 'd', 'e'};
    CSequence cs = new ImmutableCSequence(letters);
    ImmutableCSequence ck = new ImmutableCSequence(letters);
    System.out.println(cs);
    char c = cs.charAt(2);
    int len = cs.length();
    System.out.println(c + " " + len);
    boolean b = ck.startsWith('a');

您可以简化charAt()这样的

public char charAt(int n){
return this.chars[n];

}