跟踪for循环中的先前数字不起作用

时间:2014-06-04 22:28:31

标签: java loops duplicates

我知道这个在线的另一个问题,但我无法让我的代码工作。我不知道我的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

1 个答案:

答案 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从字符串中捕获值而不是所有令人困惑的拆分,则此代码将如此更容易阅读。