这是一个练习,我被要求编写方法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');
}
}
答案 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];
}