请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,这个在数组中怎么测试时候出现不来结果呢?

package com.company;

public class Array {
private int[] data;
private int size;

//构造函数,传入构造函数的容量来创建数组Array
public Array(int capacity){
    data=new int[capacity];
    size=0;
}

public Array(){
    this(10);
}
public int getSize(){
    return size;
}
public int getCapacity(){
    return data.length;
}
public boolean isEmpty(){
    return size==0;
}

public void addLast(int e){

    add(size,e);
}
public void addFirst(int e){
    add(0,e);
}

public void add(int index,int e){
    if(size==data.length){
        throw new IllegalArgumentException("add is failed");
    }
    if (index<0||index>size){
        throw new IllegalArgumentException("add is failed");

    }
    for (int i=size-1;i>=index;i--){
        data[i+1]=data[i];
        data[index]=e;
        size++;
    }


}


@Override
public String toString(){

    StringBuilder res = new StringBuilder();
    res.append(String.format("Array: size = %d , capacity = %d\n", size, data.length));
    res.append('[');
    for(int i = 0 ; i < size ; i ++){
        res.append(data[i]);
        if(i != size - 1)
            res.append(", ");
    }
    res.append(']');
    return res.toString();
}

}

package com.company;

public class Main {

public static void main(String[] args) {
    Array arr = new Array(20);
    for(int i = 0 ; i < 10 ; i ++){
        arr.addLast(i);

    }
    System.out.println(arr);





}

}
运行这个方法出现的是这个结论,怎么不能像视频里按顺序出现0到9呢?
Array: size = 0 , capacity = 20
[]

正在回答 回答被采纳积分+3

2回答

提问者 Clark_Chan 2019-02-27 18:55:57

我在Main方法中直接循环然后打印 i的值是可以的,但是就arr.addLast(i),这个好像没添加进去值

2 回复 有任何疑惑可以回复我~
liuyubobobo 2019-02-28 02:06:45

你的add代码是错误的。正确的代码如下:

// 在index索引的位置插入一个新元素e    
public void add(int index, int e){    
    if(size == data.length)    
        throw new IllegalArgumentException("Add failed. Array is full.");    
    if(index < 0 || index > size)    
        throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size.");    

    for(int i = size - 1; i >= index ; i --)    
        data[i + 1] = data[i];    

    data[index] = e;    
    size ++;    
}

 

注意,for循环中只有一句话。你将for循环外面的两句话也放到了for循环内。课程之前介绍过,对于只有一句的循环体或者if等语句,为了节省屏幕空间,我不使用大括号,而是用缩进表达。


请不要记忆for循环中应该有一句话还是三句话,一定要具体搞明白,为什么这样写,for循环到底在做什么事情。循环过程中,每一步,数据是如何变化的(结合课程中的动画演示)。


这个课程的所有代码都可以通过课程的官方github获得,遇到这种情况,也可以尝试在你的环境中运行课程的官方github,看是否有问题?如果没有问题,请仔细调试,对比,看自己的代码的问题在哪里。debug是学习算法非常重要的步骤哦:)

传送门:https://github.com/liuyubobobo/Play-with-Data-Structures 


加油!:)

1 回复 有任何疑惑可以回复我~
  • 老师我还有疑问,对于这个add方法。初始化时,size=0,在数组首位插入一个元素时,index=0,再看这个for循环,此时i=0-1=-1;i>=0;i--    i的值不就不符合循环条件了么,下面代码是怎么执行的呢?望解答,感谢~
    回复 有任何疑惑可以回复我~ 2019-10-07 22:12:16
  • 可以参考这里:https://coding.imooc.com/learn/questiondetail/82394.html
    回复 有任何疑惑可以回复我~ 2019-10-08 01:32:28
  • 基础不扎实,感谢老师,老师注意休息❤
    回复 有任何疑惑可以回复我~ 2019-10-08 07:28:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信