我知道这个在线的另一个问题,但我无法让我的代码工作。我不知道我的if语句是不正确还是其他的东西。这是我早期问题的延伸 Remove duplicates in a 2D array and add the corresponding values
问题仍然是相同但除了使用2D数组而不是使用for循环,我不想跟踪for循环中的先前数字,但是当我将数字打印到控制台时我得到重复的r值。我希望有人可以帮我看错。提前谢谢!
以下是我正在处理的代码:
double rMax = -1;
double previous;
for(int i =1; i< 256; i++){
for(int y =1; y< 256; y++){
//image.getPixel(i, y);
String x = image.getLocationAsString(i, y);
String n = image.getValueAsString(i, y);
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+" ");
if(radius == rMax){
rMax = radius;
}
String prevX = image.getLocationAsString(i-1, y-1);
String prevN = image.getValueAsString(i-1, y-1);
String [] prevT = prevX.split("r=");
String[] prevB = prevT[1].split(" mm/c");
//System.out.print("Meet b: "+b[0]);
double prev_radius = Double.parseDouble(prevB[0]);
previous = prev_radius;
if(previous == radius){
System.out.println(radius);
}
else{
System.out.println(radius);
}
//if(thetaNum <= 180.00){
data.add(radius, num);
//}
//}
}
}
System.out.println(rMax);
这就是它打印的内容:
1.59
1.59
1.58
1.58
1.57
1.56
1.56
1.55
1.55
1.54
1.54
1.53
1.52
1.52
答案 0 :(得分:1)
您未在任何地方设置previous
的值。
<强>更新强>
你的代码有很多问题。例如,它永远不会更新rMax。假设data
是某种字典,我认为这段代码会做你想要实现的。如果不是,您将需要修改更新存储的半径值的代码。
double rMax = -1;
double previous = -1;
for(int i =1; i< 256; i++){
for(int y =1; y< 256; y++){
String x = image.getLocationAsString(i, y);
String n = image.getValueAsString(i, y);
String delim = ", value=";
String [] tokens = n.split(delim);
double num = Double.parseDouble(tokens[1]);
String [] t = x.split("r=");
String [] b = t[1].split(" mm/c");
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]);
if(radius > rMax){
rMax = radius;
}
if(radius == previous){
data[radius] += num;
}
else {
data.Add(radius, num);
}
}
}
System.out.println(rMax);
顺便说一句,如果您使用Regex从字符串中捕获值而不是所有令人困惑的拆分,则此代码将如此更容易阅读。