2011-11-23 81 views
0

我無法弄清楚如何證明存在是否屬實;如何檢查一個布爾值是否存在於兩個數字範圍內的數字?

static boolean existsx(double p1x, double p2x,double[] varray) { 
    boolean foundx = false; 
    int i; 
    //System.out.println(varray.length); 

    for (double v : varray){ 
     if (varray[i] > p1x && v < p2x) { 
      foundx = true; 
      //System.out.println(x+" was found to be between"+p1x+" and "+p2x); 
      break; 
     } 
     else { 
      foundx = false; 
     } 
    } 
    return foundx; 
} 

我想檢查p1x和p2x之間數組中存在的數字是否存在。如果是,那麼返回true,否則返回false。

+1

你的代碼是錯誤的位置:'VARRAY [I]> P1X && v p1x && v zeller

回答

3

我認爲你有一些邏輯問題,聲明變量i而沒有初始化它是其中之一。

下面的代碼應該告訴你,如果給定的數組中的號碼之一是在這兩個之間:

static boolean existsx(double p1x, double p2x,double[] varray){ 
    double upperBound = Math.max(p1x, p2x); 
    double lowerBound = Math.min(p1x, p2x); 

    for (double number : varray) 
    { 
     if ((number <= upperBound) && (number >= lowerBound)) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+1

+ 1尋找獨立於客戶端代碼的上限和下限。 – helios

5

您正在嘗試使用增強型for循環和「正常」for循環的混合。此外,您正在經歷一些瑣事以避免多次退出。我把它改寫爲:

static boolean existsx(double p1x, double p2x, double[] varray) { 
    for (double v : varray){ 
     if (v > p1x && v < p2x) { 
      return true; 
     } 
    } 
    return false; 
} 

(請注意,這是目前*不包括p1xp2x,你可能想使至少一個約束包容,根據您的需要重命名的參數和方法不會傷害。 )

+0

+1:我會試圖讓'varray'成爲var-arg。 'double ... varray' –

+2

@PeterLawrey:可能。不確定 - 如果將其稱爲「existsx(1.0,2.0,3.0)」,則變得有點不清楚 - 哪個參數是哪個?有一個很好的'範圍'類型將澄清:) –

0
public static boolean exists(double p1, double p2, double[] varray) 
{ 
    for(double v : varray) 
     if(v >= p1 && v <= p2) return true; 
    return false; 
} 
0

您還可以使用SortedSet的(如果你需要做的往往是查找和VARRAY是大是你創建了一次),它應該是更快:

import java.util.SortedSet; 
import java.util.TreeSet; 

public class TestSortedSet { 
    public static void main(String[] args) { 
     double p1 = 2; 
     double p2 = 4; 
     double[] varray = { 3.0 }; 
     TreeSet<Double> set = new TreeSet<Double>(); 
     for(double d : varray) { 
      set.add(d); 
     } 

     SortedSet<Double> between = set.subSet(p1, p2); 
     System.out.printf("%s number(s) between %s and %s: %s", between.size(), p1, p2, between); 
    } 
} 
相關問題