weixin_40583091
weixin_40583091
2018-11-10 09:57

java接口参数与方法返回类型是接口。

10
  • java
  • 接口参数

1.IString是接口,注意里面的比较,连接,插入方法,在注意SeqString类比较连接插入这3个方法的参数
问题:1.类中的方法,接口参数有什么用处?可以换为String str或者SeqString str吗
2.注意compareTo(IString str)这样传参数就错呢?而SeqString str 就对呢?
3是不是compareto 的返回类型导致的,但是接口里的参数这样写没问题啊
4,有些方法的返回类型是接口,有什么用、
public interface IString {
public void clear();//串的置空操作
public boolean isEmpty();//串的判空操作
public int length();//求串的长度
public char charAt(int index);//取字符
public IString subString(int begin,int end);//取子串
public IString insert(int offset,IString str);//插入
public IString delete(int begin,int end);//删除
public IString concat(IString str);//链接
public int compareTo(IString str);//比较
public int indexOf(IString str);//字符串定位;


public class SeqString implements IString {
private char[] stringvalue;//为串申请储存空间,顺序储存
private int currentlength;//串的长度
//3个构造方法
//空串构造
//利用字符串常量构造串
//利用字符数组构造串
public SeqString() {
stringvalue=new char[0];//串的长度为零,利用顺序储存数组体现为长度构造0,申请空间为0;
currentlength=0;

}
public SeqString(String str){
    stringvalue=str.toCharArray();
    currentlength=stringvalue.length;

}
public SeqString(char[] value) {
    stringvalue=new char[value.length];
    int k=0;
    for(k=0;k<value.length;k++) {
        stringvalue[k]=value[k];

    }
    currentlength=value.length;
}
public void clear() { 
    currentlength=0;
}
public boolean isEmpty(){
    return currentlength==0;

}
public int length(){
    return currentlength;

}
public char charAt(int index) {
    if(index<0||index>=currentlength) {
        throw new StringIndexOutOfBoundsException(index);

    }else {
    return stringvalue[index];
    }
}


public void allocate(int NewCapacity){
    char[] tem=stringvalue;
    stringvalue=new char[NewCapacity];
    for(int i=0;i<tem.length;i++) { 
        stringvalue[i]=tem[i];
    }//stringvalue扩充容量

}
public IString subString(int begin,int end){//取子串
    //具体思路新建一个字符数组,将字符取出放入
    //对下标进行判断
    if(begin<0||end>currentlength||begin>end) {
        throw new StringIndexOutOfBoundsException("下标异常");
    }
    if(begin==0&&end==currentlength) {
        return this;
    }else {
        char[] buffer=new char[end-begin];//字符个数end-1-begin+1
        for(int i=0;i<buffer.length;i++) {
            buffer[i]=stringvalue[i+begin];
        }
        return new SeqString(buffer);

    }


}
public IString insert(int offset,IString str) {
    //插入
    //0<=offset<=currentlength下标问题
    //第offset位往后移动str.length
    //容量问题现容量stringvalue.length     串的长度str.length+currentlength
    if(offset<0||offset>currentlength) {
        throw new StringIndexOutOfBoundsException("下标异常");

    }
    if((str.length()+currentlength)>stringvalue.length) {
        allocate((str.length()+currentlength));
    }
    for(int i=currentlength-1;i>=offset;i--) {
        stringvalue[str.length()+i]=stringvalue[i];
    }
    for(int t=0;t<str.length();t++) {
              stringvalue[(offset+t)]=charAt(t);
    }
    currentlength=currentlength+str.length();
    return this;


}
public IString delete(int begin,int end) {
    if(begin<0||end>currentlength||begin>end) {
        throw new StringIndexOutOfBoundsException("下标异常");
    }
    for(int i=0;i<currentlength-end;i++) {
        stringvalue[begin+i]=stringvalue[end+i];//end+i<currentlength
    }
    currentlength=currentlength-(end-begin);
    return this;
}//删除
public IString concat(IString str) {
     return insert(currentlength,str);
}//链接
public int compareTo(IString str) {
    int n=Math.min(currentlength,str.currentlength);
    for(int k=0;k<n;k++) {
        if(stringvalue[k]!=str.stringvalue[k]) {
            return stringvalue[k]-str.stringvalue[k];
        }
    }
    return currentlength-str.currentlength;


}//比较
public int indexOf(IString str) {}//字符串定位;

}

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答