2012-09-13 77 views
0

我有一個從最小值到最大值的範圍。 我想通過計算爲每個這些值生成一組信息。 我想通過打印輸出這些信息。JAVA循環併爲條件內的每個值生成輸出

如何產生這個輸出給定一個循環將只輸出一次範圍內的一個值的信息?

編程經驗 - 絕對初學者。

以下是代碼: 基本上,如果用戶輸入1,我輸出所有min2值的信息。 否則,我只輸出min2的集合及其probB爲1/2的信息。 另外,我可以只使用min1(來自用戶輸入),而不分配給min2嗎?

int prompt = Integer.parseInt(input); // user input 
int min2 = 0; 
double probB = 0; 
for (min2 = min1; min2 < max1; min2++) // for loop 
{ 
    if (prompt==1){ 
    int R = 0; 
    double Rlow = 0; 
    double Rhigh = 0; 
    R = (int) (Math.sqrt(2) + 1)*min2; 
    Rlow = (Math.sqrt(2)+1)*min2+ 1; 
    Rhigh = (Math.sqrt(2)+1)*min2; 
    System.out.println(min2); 
    System.out.print(""+Rlow+""+Rhigh); 
    System.out.println(R); 
    probB = (R/R+min2)*(R-1/R+min2-1); 
    System.out.println(probB); 
    } 
    else { 
    int R = 0; 
    double Rlow = 0; 
    double Rhigh = 0; 
    R = (int) (Math.sqrt(2) + 1)*min2; 
    Rlow = (Math.sqrt(2)+1)*min2+ 1; 
    Rhigh = (Math.sqrt(2)+1)*min2; 
    probB = (R/R+min2)*(R-1/R+min2-1); 

    if (probB == 1/2){ 
     System.out.println(min2); 
     System.out.println(""+Rlow+""+Rhigh); 
     System.out.println(R); 
     System.out.println(probB); 
    } 
    } 
} 
+1

你能告訴我們你現在的代碼嗎?也許我們可以指出它的錯誤。 – Mysticial

+0

[for for語句](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html)和[PrintStream](http://docs.oracle.com/javase/7/docs/ api/java/io/PrintStream.html) – user1329572

+1

具體如我可以...基於問題的徹底性:'for(int i = min; i <= max; i ++){System.out.println(計算(ⅰ)); }' –

回答

3

代替

if (probB == 1/2){ 

使用

if (probB == 1.0d/2.0d){ 

表達1/2被計算爲的整數,它的值是零。更妙的是:

if (probB == 0.5d){ 

不過請注意,如果有在probB計算任何四捨五入的結果可能不是最終會被恰好爲0.5,即使你希望它。由於浮點表示的不準確性,您可以構造表達式,其中最終結果'應該'爲0.5,但實際結果非常接近但不是0.5。你最好的選擇是做類似的事情:

if (Math.abs(probB-0.5d) <1.0e-10d) 

也就是說,接近於10^10中的一部分

浮點計算非常有用,但由於它們不是精確表示這一事實,它們帶有一些問題。在十進制中,有一整組的有理數不能準確地表示,如1/3,1/7等。通過擴展位數(0.33333333 ...或0.142857142857142 ...)可以任意關閉。但是不能用十進制編寫精確的表示法。同樣的事情發生在浮點數上(對於不同的數字集合),但FP的長度是固定的,所以像0.1這樣的數字不能準確地表達在FP中。它很接近,但並不確切。您必須始終考慮這種可能性進行比較。