2014-06-04 118 views
0

我知道這個在線的另一個問題,但我無法讓我的代碼工作。我不知道我的if語句是不正確的還是其他的。這是我以前的問題的延伸 Remove duplicates in a 2D array and add the corresponding values跟蹤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

你不是要設置的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); 

而且,順便說一下,這個代碼將是這麼更容易閱讀,如果您使用正則表達式從字符串,而不是所有的混亂分裂捕捉值。

+0

對不起,我忘了在複製粘貼時的問題中添加了這個問題,但它似乎還沒有解決問題。我不知道是否它的if語句不正確。原因我只希望重複打印r值一次而不是兩次。所以我不知道代碼有什麼問題。 – selena

+0

我在我的問題中添加了最近更新的代碼。但我似乎無法擺脫重複。 – selena

+0

好的,所以現在你的代碼完成同樣的事情,不管是否有'radius == previous'。 「if」和「else」塊是相同的,無論如何,這些值都會被添加到「data」集合中。 –