java迭代问题,二次迭代问题i

问题描述

java迭代问题,二次迭代问题i

import java.util.Iterator;
import java.util.NoSuchElementException;

public class MyArrrayList implements Iterable {
private static final int DEFAULT_CAPACITY = 10;
private int theSize;
private AnyType[] theItems;

public MyArrrayList() {
    clear();
}

public void clear() {
    theSize = 0;
    ensureCapality(DEFAULT_CAPACITY);
}

public int size() {
    return theSize;
}

public boolean isEmpty() {
    return size() == 0;
}

public void trimSize() {
    ensureCapality(size());
}

public AnyType get(int idx) {
    if (idx < 0 || idx >= size())
        throw new ArrayIndexOutOfBoundsException();
    return theItems[idx];
}

public AnyType set(int idx, AnyType newVal) {
    if (idx < 0 || idx >= size())
        throw new ArrayIndexOutOfBoundsException();
    AnyType old = theItems[idx];
    theItems[idx] = newVal;
    return old;
}

@SuppressWarnings("unchecked")
public void ensureCapality(int newCapality) {
    if (newCapality < theSize)
        return;
    AnyType[] old = theItems;
    theItems = (AnyType[]) new Object[newCapality];
    for (int i = 0; i < size(); i++) {
        theItems[i] = old[i];
    }
}

public boolean add(AnyType x) {
    add(size(), x);
    return true;
}

public void add(int idx, AnyType x) {
    if (theItems.length == size())
        ensureCapality(size() * 2 + 1);
    for (int i = theSize; i > idx; i--)
        theItems[i] = theItems[i - 1];
    theItems[idx] = x;
    theSize++;
}

public AnyType remove(int idx) {
    if (idx < 0 || idx >= size())
        throw new ArrayIndexOutOfBoundsException();
    AnyType removeItem = theItems[idx];
    for (int i = idx; i < theSize; i++)
        theItems[i] = theItems[i + 1];
    theSize--;
    return removeItem;
}

@Override
public Iterator<AnyType> iterator() {
    // TODO Auto-generated method stub
    return new ArrayListIterator(this);
}

private static class ArrayListIterator<AnyType> implements Iterator<AnyType> {
    private int current = 0;
    private MyArrrayList<AnyType> theList;
    public ArrayListIterator(MyArrrayList<AnyType> list){
        theList=list;
    }

    public boolean hasNext() {
        return current < theList.size();
    }

    public AnyType next() {

        return theList.theItems[current++];
    }

    public void remove() {
        theList.remove(--current);
    }
}

public static void main(String[] args) {
    MyArrrayList<Integer> list=new MyArrrayList<Integer>();
    for(int i=1;i<20;i++)
    list.add(i);

    Iterator<Integer> it=list.iterator();
    while(it.hasNext())
    {
        System.out.print(it.next());
        System.out.print(" ");

    }
    Iterator<Integer> its=list.iterator();

    while(it.hasNext())
    {
        System.out.println(it.next());
    }

}

}
请问我的输出为:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
明明写了两个输出语句,为什么只有一个输出呢?

解决方案

Iterator its=list.iterator();

while(it.hasNext())
{
    System.out.println(it.next());
}

第二个你参数写错了 应该是its.hasNext()

解决方案二:

hasnext 已经指向最后一个了下一个自然不满足条件

解决方案三:

应该是hasnext的原因,你不能改成别的吗

解决方案四:

三楼只正解。

第一个迭代器在第一个循环里面已经指向最后一个元素了。第二个循环还用第一个迭代器去取元素,当然就取不到了。应该用新的迭代器就可以。

解决方案五:

先用it.hasNext() 判断集合里是不是已经没有元素了
如果有就用
it.next();
就是取得当前集合的元素 然后把指针往后移一位指向下一个元素(java确实还是有指针的只不过你不能自己调用罢了)
指针指完了就没有了,所以后面就进不去了,如果你还想打印可改为
it =list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}

解决方案六:

先用it.hasNext() 判断集合里是不是已经没有元素了
如果有就用
it.next();
就是取得当前集合的元素 然后把指针往后移一位指向下一个元素(java确实还是有指针的只不过你不能自己调用罢了)
指针指完了就没有了,所以后面就进不去了,如果你还想打印可改为
it =list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}

解决方案七:

it,its。没有区分,接着对it取hasnext肯定是假啊

时间: 2024-09-28 21:22:38

java迭代问题,二次迭代问题i的相关文章

使用Rational Team Concert实现企业案例协同开发设置与迭代计划(二)

6. 点击项目或者团队编辑窗口中的 Save 分配一个角色给用户 分配一个角色给用户: 1. 打开项目或者团队编辑窗口的 Overview 页面 . a. 对于项目,在 Team Artifacts 视图中右击选择的项目,点击 Open . b. 对于团队,在 Team Organization 视图中,选择一个团队 , 右击鼠标,点击 Open 图 40. 开发设置与迭代计划(二)-rational rose"> 2. 从成员列表中选择用户,点击 Process Roles 3. 在 E

电信网管中的Java客户端(二)

客户端|网管 电信网管中的Java客户端(二) 1.概述前文讲述了用Java开发电信网管界面系统遇到的困难.其中,制作网络拓扑图是我们第一个必须克服的困难.本文概述如何使用和制作网络拓扑图的产品和方法和思路. 2.电信网络拓扑组件的要求网络拓扑图是电信网管客户端的核心.对于电信网络,在使用任何网络拓扑组件时,必须注意电信网络的一些特点: · 数据量大.一般电信网络的规模都比较大,网络设备数量多,拓扑复杂.网络拓扑图界面必须考虑到能够处理大数据量的网络节点和连接. · 多层次展示网络.在一个综合电

编写高质量代码改善C#程序的157个建议[IEnumerable&lt;T&gt;和IQueryable&lt;T&gt;、LINQ避免迭代、LINQ替代迭代]

原文:编写高质量代码改善C#程序的157个建议[IEnumerable<T>和IQueryable<T>.LINQ避免迭代.LINQ替代迭代] 前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议29.区别LINQ查询中的IEnumerable<T>和IQueryable<T> 建议30.使用LINQ取代集合中的比较器和迭代器 建议31.在LINQ查询中避免不必要的迭代

二维数组 引用-Java中的二维数组的引用问题

问题描述 Java中的二维数组的引用问题 代码: public static void main(String args[]){ double[][] a={{1,2,3},{4,5,6},{7,8,9}}; System.out.println(a+" "+a[0]); } 结果: [[D@15db9742 [D@6d06d69c 疑惑:二维数组名a的引用和a[0]的引用有什么不同? 解决方案 您好,a是一个二维数组,a的引用就是整个二维数据对象,a[0]则是二维数组中的第一个对象{

用JAVA 设计生成二维码详细教程_java

教你一步一步用 java 设计生成二维码 在物联网的时代,二维码是个很重要的东西了,现在无论什么东西都要搞个二维码标志,唯恐落伍,就差人没有用二维码识别了.也许有一天生分证或者户口本都会用二维码识别了.今天心血来潮,看见别人都为自己的博客添加了二维码,我也想搞一个测试一下. 主要用来实现两点: 1. 生成任意文字的二维码. 2. 在二维码的中间加入图像. 一.准备工作. 准备QR二维码3.0 版本的core包和一张jpg图片. 下载QR二维码包. 首先得下载 zxing.jar 包, 我这里用的

java在定义二维数组时定义第二层数组出现的问题

问题描述 java在定义二维数组时定义第二层数组出现的问题 解决方案 triang已经定义了,不需要重复定义,去掉报错那行定义的int 解决方案二: 去掉错误那行前面的int 解决方案三: 下边不是已经可以了吗,想说啥 解决方案四: java动态定义二维数组问题关于vector定义二维数组的问题Java定义二维数组的几种方法

java解析xml二种方法

java解析xml二种方法 配置文件为: <?xml version="1.0" encoding="utf-8"?> <config>     <point name="test1">         <name>zhang3</name>         <address>abcdefg</address>         <email>a@b.c

Java中的二维数组

Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空间 或者 如: 2. 赋值 二维数组的赋值,和一维数组类似,可以通过下标来逐个赋值,注意索引从 0 开始 也可以在声明数组的同时为其赋值 如: 3. 处理数组 二维数组的访问和输出同一维数组一样,只是多了一个下标而已.在循环输出时,需要里面再内嵌一个循环,即使用二重循环来输出二维数组中的每一个元素.如:  

java集合问题-关于Struts2迭代标签的问题

问题描述 关于Struts2迭代标签的问题 想请教下各位大神,我在action里面有2个集合,想在JSP页中遍历出来,我想要的功能是第一个集合内容全部显示,第二个集合内容只显示与第一个集合匹配的元素.提供下思路