我知道网上还有另一个类似的问题,但是我无法使我的代码正常工作。我不知道我的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
最佳答案
您没有在任何地方设置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从字符串中捕获值,而不是从所有令人困惑的拆分中捕获代码,那么它将更容易阅读。
关于java - 在for循环中跟踪先前的数字不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24048658/