2012-01-04 31 views
0

在我的代碼,我得到通過元件迴路的列表和計算的一些值,現在:在ratioArray得到在Java(機器人)一個有序數組的原始索引

 double targetRatio = Math.min((double)w/h, (double)h/w);//height & width of the screen 
     List<Size> sizes //populated with supported height and width 
    double ratioArray[]; 
    int i; 
    for (i = 0; i <= sizes.size(); i++) 
    { 
     double ratio = Math.min((double)sizes.get(i).width/sizes.get(i).height, (double)sizes.get(i).height/sizes.get(i).width); 
     ratioArray[i] = Math.abs(ratio - targetRatio); 
     // Math.min((double)sizes.get(i).width/w, (double)w/sizes.get(i).width); 
     // Math.min((double)h/sizes.get(i).height, (double)sizes.get(i).height/h); 
     //sizes.get(i).width 
     //sizes.get(i).height 

    } 

下的值[I ]我得到了更好的比例;現在我被困在定位最佳比例,我可以這樣做:

Arrays.sort(ratioArray); 

但是,那麼我如何得到索引回來?我必須使最小值指向它的大小

回答

2

最好的辦法是通過ratioArray迭代,並且不使用Arrays.sort(ratioArray);

double targetRatio = Math.min((double)w/h, (double)h/w);//height & width of the screen 
     List<Size> sizes //populated with supported height and width 
    double ratioArray[]; 
    int i; 
    for (i = 0; i <= sizes.size(); i++) 
    { 
     double ratio = Math.min((double)sizes.get(i).width/sizes.get(i).height, (double)sizes.get(i).height/sizes.get(i).width); 
     ratioArray[i] = Math.abs(ratio - targetRatio); 
     // Math.min((double)sizes.get(i).width/w, (double)w/sizes.get(i).width); 
     // Math.min((double)h/sizes.get(i).height, (double)sizes.get(i).height/h); 
     //sizes.get(i).width 
     //sizes.get(i).height 

    } 

把這個上面的代碼後,

 int min = ratioArray[0]; 
     int minindex; 
     for (int i = 0; i < ratioArray.length; i++) { 
      if(min > ratioArray[i]) { 
min = ratioArray[i]; 
       minindex = i; 
      } 
     } 

,你會得到你的minindex

+0

迭代兩次而不是直接在計算過程中做最小事情的原因在哪裏? 這個雙重迭代的唯一原因是保留比率數組以便以後重複使用。 對於這種方法以及問題本身,目前還不清楚,爲什麼最小的比例是你想要得到的東西... – fkerber 2012-01-04 16:22:12

+0

是的,它可以在計算過程中完成,但我張貼這種方式更好的理解和簡單...優化是後期首先你需要實現你想要的。 – 2012-01-04 16:28:55

+0

是的,這是正確的一般 - 也許這是你的答案「最好」,讓我感到不安。 – fkerber 2012-01-04 16:31:07

1

是否需要先計算所有比率然後對它們進行排序? 我會計算for循環中的比率(就像現在這樣做),然後檢查它是否比迄今爲止的最佳計算比率更好。如果是,將其存儲(及其索引)作爲bestRatio和bestRatioIndex並繼續 - 如果不是,則繼續下一個循環。 循環之後,您有兩個變量中的最佳比例和索引。 如果您發現完全匹配,您甚至可以將循環留在中間。

+0

你的意思是:如果(比率[i-1]>比率[i]){使用這個比率}否則{使用前一個}? – tom91136 2012-01-04 16:10:53

+0

這取決於你想達到什麼。從你的帖子中,我想你想找到最適合你所需旋轉的尺寸條目,不是嗎? 這意味着要計算比率並採取它,如果它比以前最接近的比率更接近目標比率。 – fkerber 2012-01-04 16:15:07

+0

因此,如果我在尋找最接近屏幕的比例(h&w),我會比較比率並找出差距最小的比例,所以我之前的評論是有意義的,或者是錯誤的? – tom91136 2012-01-04 16:20:13

相關問題