下面的代码将半径和值存储在其列表中。但是当我去打印值时,它只打印半径而不是其他变量值。我不明白为什么它不打印出来。
这是我的代码:
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++;
}
}
答案 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());
}
}