列表不打印出其中一个变量

时间:2014-06-06 17:12:06

标签: java list arraylist

下面的代码将半径和值存储在其列表中。但是当我去打印值时,它只打印半径而不是其他变量值。我不明白为什么它不打印出来。

这是我的代码:

public class AddingBoth {

private double radius;
private double value;
private List<AddingBoth> list = new ArrayList<AddingBoth>();

public AddingBoth(double radius, double value){
    this.radius = radius;
    this.value = value;
    list.add(this);
}

public List<AddingBoth> getList(){
    return list;
}

public double getRadius(){
    return radius;
}

public double getValue(){
    return value;
}

public void print(){
    Iterator<AddingBoth> iter = list.iterator();
    while(iter.hasNext()){
        System.out.println(iter.next().getRadius()+"    ");
    }

    System.out.println("This is the value;  ");
    while(iter.hasNext()){
        System.out.println("Value:    "+iter.next().getValue());
    }
}
 }

这就是我打电话给我班级的地方:

   AddingBoth ab = null;

         for(int i =0; i< 256; i++){
             int y=0;
                while(y<256){
                    //image.getPixel(i, y);
                    String x = image.getLocationAsString(i, y);
                    String n = image.getValueAsString(i, y);
                    //System.out.println(x);

                    String delim = ", value=";
                    String [] tokens = n.split(delim);
                    double num = Double.parseDouble(tokens[1]);

                    //if(image.getR() < 1.43){
                        String [] t = x.split("r=");
                        String[] b = t[1].split(" mm/c");
                        //System.out.print("Meet b:    "+b[0]);
                        double radius = Double.parseDouble(b[0]);

                        String [] theta = x.split("theta= ");
                        String [] token2 = theta[1].split(Character.toString(IJ.degreeSymbol));
                        float thetaNum = Float.parseFloat(token2[0]);
                        //System.out.print("  This is the theta value:    "+thetaNum+"    ");

                    ab = new AddingBoth(radius, num);
                    ab.print();
                        y++;
                }
         }

3 个答案:

答案 0 :(得分:3)

由于你已经在迭代器上运行,直到它没有更多的值,你已经筋疲力尽了,而且你永远不会进入第二个while循环。

避免这种情况的一种方法是为第二个循环使用一个新的迭代器:

public void print(){
    Iterator<AddingBoth> iter = list.iterator();
    while(iter.hasNext()){
        System.out.println(iter.next().getRadius()+"    ");
    }

    System.out.println("This is the value;  ");
    iter = list.iterator(); // new iterator!
    while(iter.hasNext()){
        System.out.println("Value:    "+iter.next().getValue());
    }
}

答案 1 :(得分:1)

您的打印方法应该简化,您可能真的想要这样的东西 -

public void print(){
  for (AddingBoth ab : list) {
    // Is your radius really a String?
    System.out.println(String.valueOf(ab.getRadius()) + " = " + ab.getValue());
  }
  // As the other answers point out you had already exhausted the iterator.
  System.out.flush();
}

答案 2 :(得分:0)

您使用Iterator两次,这会导致您的问题。基本上,你一直在列表中,然后在最后,你问是否列表中有另一个元素(没有)。到达目的地时,列表不会重新启动。

而不是两个while循环,只需使用一个。

public void print(){
    Iterator<AddingBoth> iter = list.iterator();
    AddingBoth temp;
    while(iter.hasNext()){
        temp = iter.next();
        System.out.println(temp.getRadius()+"    ");
        System.out.println("Value:    "+temp.getValue());
    }
}