2014-04-11 52 views
0

我似乎無法獲得我的隨機生成點距離的單個MAX值。 因此,我無法創建必要的最長距離。最大值沒有返回正確的值

 for(int i = 0; i < pts.length; i++) { 
      pts[i] = new Point2D(Math.random(), Math.random()); 
      StdDraw.setPenColor(StdDraw.RED); 
      StdDraw.setPenRadius(0.008); 
      pts[i].draw(); 

      for(int j = 0; j < i; j++) { 
       double distance[] = { pts[i].distanceTo(pts[j]) }; 
       for(int k = 0; k < distance.length; k++) { 
        while(distance[k] > max) { 
         max = distance[k]; 
         if(max > 0) { 
          System.out.println(max); 
          StdDraw.setPenColor(StdDraw.BLACK); 
          StdDraw.setPenRadius(0.002); 
          pts[i].drawTo(pts[j]); 
+2

請更好地格式化此代碼,並添加其餘的代碼。看起來你錯過了一些東西(也許它只是大括號......)。 –

+0

所以爲了澄清,你需要max來包含'distance'裏面最大的數字?你有三個'for循環',所以你想要打印多少次'max'? – ryrich

+0

所以我需要一次最大距離。僅打印/返回一次,因此IF語句可以繪製最大距離的線。 – user3395013

回答

1

因此,在你的內圈最內圈,只需檢查每個距離並存儲max。一旦循環完成,執行你的繪圖。爲此,您需要將點的索引(i和j)存儲在全球某處。所以像這樣:

// declare these guys to keep track of where to draw 
int maxI = 0; 
int maxJ = 0; 

for (int i = 0; i < pts.length; i++){ 
    pts[i] = new Point2D(Math.random(), Math.random()); 
    StdDraw.setPenColor(StdDraw.RED); 
    StdDraw.setPenRadius(0.008); 
    pts[i].draw(); 
    for (int j = 0; j<i; j++){ 
     double distance[] = {pts[i].distanceTo(pts[j])}; 
     for (int k = 0; k <distance.length; k++){ 
      if (distance[k] > max){ 
       max = distance[k]; 
       maxI = i; 
       maxJ = j; 
      } 
     } 
    } 
} 

if (max > 0){ 
    System.out.println(max); 
    StdDraw.setPenColor(StdDraw.BLACK); 
    StdDraw.setPenRadius(0.002); 
    pts[maxI].drawTo(pts[maxJ]); 
} 
+0

所以技術上我只需要重新索引I和J?並非常感謝你,因爲這一整天我都感到痛苦! – user3395013

+1

@ user3395013是的,因爲你的'drawTo'函數依賴於'i'和'j',它們只在for循環中定義,所以你只需要在某處存儲這些信息的副本。 – ryrich

+0

我只是落後一步,在「max = distance [k]」上有太多的隧道視覺!再次感謝你! – user3395013