请稍等 ...
×

采纳答案成功!

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

删除所有值,removeAllElement这么写可以吗?老师

     public void removeAllElement(int e){
        int index = find(e);
        if (index!=-1){
            for (int i = 0; i < size; i++) {
                if (data[i]==e){
                    remove(i);
                    i--;
                }
            }
        }else {
            System.out.println("数组中不存在该值");
        }
    }

正在回答

3回答

赞!完全可以!:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉0752201559 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-08-29 09:52:57
  • 你好 bobo老师  请问i--应该怎么理解呢
    回复 有任何疑惑可以回复我~ 2020-01-06 10:21:41
  • //删除全部元素e
    public void removeAllElement(int e){
        int index = find(e);
        while (index != -1){
            removeElement(e);
            index = find(e);
        }
    }
     
    老师,可以这样吗
    回复 有任何疑惑可以回复我~ 2022-02-25 22:22:10
sudo1995 2022-02-25 22:20:04
//删除全部元素e
public void removeAllElement(int e){
    int index = find(e);
    while (index != -1){
        removeElement(e);
        index = find(e);
    }
}

老师,可以这样吗


0 回复 有任何疑惑可以回复我~
  • 逻辑是正确的,但这样做比这个同学提问的代码效率低。因为 find 每次都从头开始找元素 e,假设这个数组前 100 万个元素都不是 e,后 100 万个元素都是 e,你的代码每轮删除一个 e,对于前 100 万个元素都要重新遍历一遍。而提问同学的代码每次找新的 e,都是从上次删除的位置之后继续寻找的:)
    回复 有任何疑惑可以回复我~ 2022-02-26 02:13:32
慕用5014806 2020-01-06 10:21:14

你好  请问i-- 应该怎么理解

0 回复 有任何疑惑可以回复我~
  • 删除一个元素以后,这个元素后续所有的元素,索引都会 -1,如果再执行 for 里的 i++,就会跳过一个元素。所以 i -- 一下,才能继续看下一个未考察的元素。实际用这段代码,单步跟踪试试看?加油!:)
    回复 有任何疑惑可以回复我~ 2020-01-06 15:36:25
  • Screenly 回复 liuyubobobo #2
    老师可以这么理解不? i-- 就是把指针在遇到符合条件的元素的时候,往前移,始终保持在被移除位置的前面
    回复 有任何疑惑可以回复我~ 2020-04-21 17:36:38
  • liuyubobobo 回复 Screenly #3
    我不能肯定你的“理解”是否正确。因为理解是主观的,如果你的“理解”能得到正确的“逻辑”的话,那么理论上就是正确的。但在我看来,你的理解有问题。因为 i-- 发生在 remove(i) 之后,此时这个元素已经删除了,“保持被移除位置的前面”说不通(为什么要保持被移除位置的前面?)。i -- 的意义是保证没有一个元素漏查。在 remove(i) 执行以后,i 后面的所有元素的下标都前移了,所以 i 也要前移。
    回复 有任何疑惑可以回复我~ 2022-02-26 02:19:33
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信