weixin_40583091 2018-11-10 09:57 采纳率: 100%
浏览 3214
已结题

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条回答 默认 最新

  • threenewbee 2018-11-10 17:53
    关注

    返回的类型是接口,这样可以让依赖关系倒置。
    传统的程序,主程序调用子程序,子程序必须在主程序编写之前先写好。
    所谓依赖倒置,就是让子程序依赖主程序,那么可以先写好主程序,在不重新编译主程序的情况下,修改、替换、扩充子程序。(所谓的插件化)
    用的办法就是主程序定义了接口,接口定义了方法。
    子程序用自己的类实现接口的方法,并编写不同的代码。子程序返回的类型是接口类型(实际上返回的是实现了这个接口的一个类的对象),主程序通过接口,而不是具体的类型调用。
    接口是主程序之前就定义好了的。主程序不需要依赖子程序的具体的类,也不需要知道是什么类实现的接口,这样就把依赖反过来了。

    评论

报告相同问题?

悬赏问题

  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?