import java.util.*;
 class Gerbil { static int gerbilNumbel=0;
int p;
    public Gerbil() 
    {
     p=++gerbilNumbel;
    }
   void hop(Iterator<Gerbil> p1)
   {
    while(p1.hasNext())
    {
    p1.next().print1();
   
    }
    }
    void print1()
    {
    System.out.println(p+" is jumpping");
    }
    public static void main(String []args)
    {
     Map<String,Gerbil> gerbil=new HashMap<String,Gerbil>();
    
     gerbil.put("SB1",new Gerbil());
     gerbil.put("SB2",new Gerbil());
     gerbil.put("SB3",new Gerbil());
     gerbil.put("SB4",new Gerbil());
       Gerbil px=new Gerbil();
       Set key1=gerbil.keySet();
      Iterator<Gerbil> sp= key1.iterator();
      {
      
       System.out.println(gerbil.containsKey(sp.next()));
       System.out.println();
      }
      gerbil.hop(sp);
  
     }
    
}那个题目的要求是,使用map,将键和值关联起来,  为keySet获取Iterator,同它遍历map,并且针对键来查询gerbil,并且打印出键,最后用gerbil来执行hop。我将     gerbil.put("SB1",new Gerbil());
     gerbil.put("SB2",new Gerbil());
     gerbil.put("SB3",new Gerbil());
     gerbil.put("SB4",new Gerbil());   关联了。获取iterator:
          Set key1=gerbil.keySet();
      Iterator<Gerbil> sp= key1.iterator();键来查询gerbil:
          System.out.println(gerbil.containsKey(sp.next()));这里出现了一个非常尴尬的问题,可能是我获取的方式不对也可能是我的思路错误,那就是当我使用sp.next()来查询是否匹配时,却无法再次输出了。(-o-!)因为如果再用一次next(),那么就变成下一个值了。而且还有一个问题,那就是用gerbil来执行hop:   
void hop(Iterator<Gerbil> p1)
   {
    while(p1.hasNext())
    {
    p1.next().print1();
   
    }
    }
现在hop 需要一个gerbil类的iterator,但是我刚才利用keyget创建的iterator:
          Set key1=gerbil.keySet();
      Iterator<Gerbil> sp= key1.iterator();
虽然也是一个gerbil类的iterator,但里面保存的却是key,那么我该怎么做来使用gerbil来调用hop呢?????
·····汗·····

解决方案 »

  1.   

    补充一下,刚才有一点没说清楚,我使用了一次next:     sp.next();  将这个丢到gerbil.containsKey(sp.next() ) 里面,用来查询是否匹配,但是
    我现在想输出这个键,像这样:Systems.out.print(sp.next());但是如果我这样做了,实际上输出的就是下一个键了······那么我该怎么做才能又使用这个键来查询是否匹配,又能够用来输出呢?
    ······我先前试了一种办法就是  Grebil x=sp.next();结果失败了,还试了另一种办法String x=sp.next();汗,结果证明了,抱着侥幸心理的肯定要失败的。又失败了。没办法,只好发求助了······
      

  2.   

    Gerbil x=sp.next();是正确的,只是你拚错了
      

  3.   

    import java.util.*;class Gerbil {    static int gerbilNumbel = 0;
        int p;    public Gerbil() {
            p = ++gerbilNumbel;
        }    void hop(Iterator<Gerbil> p1) {
            while (p1.hasNext()) {
                p1.next().print1();        }
        }    void print1() {
            System.out.println(p + " is jumpping");
        }    public static void main(String[] args) {
            Map<String, Gerbil> gerbil = new HashMap<String, Gerbil>();        gerbil.put("SB1", new Gerbil());
            gerbil.put("SB2", new Gerbil());
            gerbil.put("SB3", new Gerbil());
            gerbil.put("SB4", new Gerbil());
            Gerbil px = new Gerbil();
            Set key1 = gerbil.keySet();
            Iterator<Gerbil> sp = key1.iterator();
            {
                Gerbil x=sp.next();
                System.out.println(gerbil.containsKey(x));
                System.out.println(x);
                x.hop(sp);
            }
           
        }
    }
      

  4.   

    瞎搞么,比较无语:
    Iterator <Gerbil> sp = key1.iterator();  //key 集合怎么能转换成Gerbil类型呢???

      Gerbil x = sp.next(); // sp是key的集合,怎么能复制给Gerbil呢???
      System.out.println(gerbil.containsKey(x)); 
      System.out.println(x); 
      x.hop(sp); 

      

  5.   

    还有就是不知道程序写的什么意思。
    下面的代码至少也要有一个循环啊:
    Iterator <Gerbil> sp = key1.iterator(); 
    { // 难道不需要while之类的关键字吗???
      Gerbil x=sp.next(); 
      System.out.println(gerbil.containsKey(x)); 
      System.out.println(x); 
      x.hop(sp); 
    }
      

  6.   

    我是准备写个while的,但是我还在做试验。所以准备先看能不能运行再去写循环。汗,我是长期能够编译,不能运行啊。咳咳····另外,是题目说的,要为  keySet()获取iterator的列,我就在想,什么叫为keySet获取iterator列。   
     后来跑去看api,发现keySet可以返回一个set,虽然里面保存的是键,   
        于是我就: Set key1=gerbil.keySet(); 先用gerbil调用ketset()获取一个Set,再把这个set赋给一个set 的引用。
         变成set以后,就可以iterator了撒·····    
        于是:Iterator <Gerbil> sp= key1.iterator();我用那个set的引用key1来调用iterator(),来获得一个iterator.````  汗,如果:Iterator <Gerbil> sp= key1.iterator();   这一句,key不能丢到一个存放gerbil的iterator里面,那应该丢到哪个里面呢······请指教指教啊。我的思路是因为key里面保存的是gerbil的键嘛,所以要存在《gerbil》里面。可能错了吧。  我再去试一下。
      我当时看题目的要求就是要用ketset()来获取iterator嘛。所以我看api,最后得出来的过程就是这个过程。·······
       嘿嘿,还有个老兄说我单词打错了汗,我再去试试······    
      

  7.   

    哎,我刚才试了一下,还是昨天的结论,我程序里那个单词没写错,是发帖的时候单词写错了……  使用Iterator <Gerbil> sp = key1.iterator();   这里的sp调用next():  Gerbil x11=sp.next();  然后当我想使用这个 x11来当做键来查询的时候:System.out.println(gerbil.containsKey(x33));  这里,编译是没有问题的,但是运行时会抛出异常。      就是我昨天遇到的问题。  我是这样想的:sp.next() 里保存的是Gerbil里的键,但是却使用了一个Gerbil的引用:Gerbil x11=sp.next();   是不是因为存放的是键,而引用的对象又是一个Gerbil,所以导致key丢失呢????    或者,是不是 有可能,key没有丢失,但是这样子存放进去,却需要另外的办法,比如调用一个别的什么方法来将键取出来,正常使用呢?
       或者,也许这样可以????       map<String> =sp.next();因为我现在要做的就是保存键,来让我使用嘛·····
       汗,我再去试试
      

  8.   

      哈哈,终于解决了!!!!!     将一个sp.next(),放到一个容器里就可以了。   看来以前还是太傻太天真啊。        早该想到,既然能使用一个引用Gerbil x=sp.next();来保存键,为什么不能使用容器来保存键呢??   我是这样做的,LinkedList<Gerbil> ss=new LinkedList<Gerbil>();ss.add(sp.next());最后要使用的时候,将ss.get(0);就行了。·······  嘿嘿,谢谢大家,大家激发了我的灵感······        
      

  9.   

    Gerbil x=sp.next();是正确的,只是你拚错了