我知道网上还有另一个类似的问题,但是我无法使我的代码正常工作。我不知道我的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/

10-11 02:25