2014-04-08 52 views
0

我有一個程序如下所示 其中我正在檢查不同條件的開放價值(多大程度上買方價格大於或低於開放價格)如何消除在這種情況下,如果條件

有沒有什麼更好的辦法事先處理這個

package com; 

import java.sql.Time; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Test extends Thread { 

    public static void main(String[] args) { 

     double firstbuyer1 = 1.34; 
     double firstbuyer2 = 2.34; 
     double firstbuyer3 = 3.45; 
     double firstbuyer4 = 2.45; 
     double firstbuyer5 = 1.50; 

     double open = 3.40; 

     int positivevalue =0; 
     int lessthan2 =0; 
     // checking the positive conditions 
     if(firstbuyer1==open||firstbuyer1-open<0.50) 
     { 
      positivevalue = positivevalue+1; 
     } 

     if(firstbuyer2==open||firstbuyer1-open<0.50) 
     { 
      positivevalue = positivevalue+1; 
     } 

     if(firstbuyer3==open||firstbuyer1-open<0.50) 
     { 
      positivevalue = positivevalue+1; 
     } 

     if(firstbuyer4==open||firstbuyer1-open<0.50) 
     { 
      positivevalue = positivevalue+1; 
     } 

     if(firstbuyer5==open||firstbuyer1-open<0.50) 
     { 
      positivevalue = positivevalue+1; 
     } 
      //  // checking the negative conditions 

     if(firstbuyer1-open<2) 
     { 
      lessthan2 = lessthan2; 
     } 

     if(firstbuyer2-open<2) 
     { 
      lessthan2 = lessthan2+1; 
     } 

     if(firstbuyer3-open<2) 
     { 
      lessthan2 = lessthan2+1; 
     } 

     if(firstbuyer4-open<2) 
     { 
      lessthan2 = lessthan2+1; 
     } 

     if(firstbuyer5-open<2) 
     { 
      lessthan2 = lessthan2+1; 
     } 


     // similarly i need to write for lessthan 3 , lessthan 4 , lessthan 5 


    } 
} 

感謝。

+3

爲什麼你連續做5次? – Gladhus

+0

「if(firstbuyer1 == open || firstbuyer1-open <0.50)」有時經常出現或者?請格式化您的代碼,比如「lessthan2 + 1」;變成「小於2 + 1」; - 「if(firstbuyer2-open <2)」「if(firstbuyer2 - open <2)」將提高可讀性:-) – Gizzmo

+0

創建一個列表/數組/無論哪個買家,並將邏輯應用於包含的每個元素?! – Morfic

回答

1

,而不用聲明5個不同變量的如下 -

double firstbuyer1 = 1.34; 
double firstbuyer2 = 2.34; 
double firstbuyer3 = 3.45; 
double firstbuyer4 = 2.45; 
double firstbuyer5 = 1.50; 

使用集合。例如一個數組如下 -

double[] firstbuyers = {1.34, 2.34, 3.45, 2.45, 1.50}; 

現在,當條件相似時,可以利用循環。例如

for(int i = 0; i < firstbuyers.length; i++) { 
    // ... refer to current firstbuyer as firstbuyers[i] 
    if((firstbuyer[i] - open) < 2) { 
     lessthan2 = lessthan2 + 1; 
    } 
} 
+0

非常感謝。 – Pawan

+0

不客氣。 :) –

0
package com; 

import java.sql.Time; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Test extends Thread { 

    public static void main(String[] args) { 

     double firstbuyer1 = 1.34; 
     double firstbuyer2 = 2.34; 
     double firstbuyer3 = 3.45; 
     double firstbuyer4 = 2.45; 
     double firstbuyer5 = 1.50; 

     double open = 3.40; 

     int positivevalue =0; 
     int lessthan2 =0; 
     // checking the positive conditions 

     if(firstbuyer1==open||firstbuyer1-open<0.50) 
     { 
      positivevalue = positivevalue + 5; 
     } 


     // checking the negative conditions 

     if(firstbuyer1-open<2) 
     { 
      lessthan2 = lessthan2 + 4; 
     } 



     // similarly i need to write for lessthan 3 , lessthan 4 , lessthan 5 


    } 
} 
0

首先,那段代碼在精度方面不正確。你不能使用double - double < some_other_double。您可以嘗試例如:

double d1 =0.83; 
double d2= 0.5; 
double diff = d1 -d2; 

不會產生0.33正如您所料,而是0.32999999999999996。 因此,該代碼中的問題不僅是方便的方法,而且是正確的方法。您應該使用BigDecimal以獲得正確的結果。然後你可以使用的方法有以下特徵,例如:

boolean isLessThan(BigDecimal d1, BigDecimal d2, BigDecimal lessThanLimit); 
0

使用功能封裝條件邏輯

public class Test extends Thread { 

      public static int buyerPositive(double buyer, double open){ 
       return buyer == open || buyer - open < 0.50 ? 1 : 0; 
      } 
      public static int buyerNegative(double buyer, double open, int amount) { 
       return buyer - open < amount ? 1 : 0; 
      } 

      public static void main(String[] args) { 

       double firstbuyer1 = 1.34; 
       double firstbuyer2 = 2.34; 
       double firstbuyer3 = 3.45; 
       double firstbuyer4 = 2.45; 
       double firstbuyer5 = 1.50; 

       double[] buyers = {firstbuyer1, firstbuyer2, firstbuyer3, firstbuyer4, firstbuyer5 }; 

       double open = 3.40; 

       int positivevalue =0; 
       int lessthan2 =0; 
       int lessthan3=0; 
       int lessthan4 =0; 
       int lessthan5 =0; 

       for (double buyer : buyers){ 
        positivevalue += buyerPositive(buyer, open); 
        lessthan2 += buyerNegative(buyer, open, 2); 
        lessthan3 += buyerNegative(buyer, open, 3); 
        lessthan4 += buyerNegative(buyer, open, 4); 
        lessthan5 += buyerNegative(buyer, open, 5); 
       } 

      } 

    } 
1

嘗試使用數組。

double[] buyer = {1.34, 2.34, 3.45, 2.45, 1.50}; 
double open = 3.4; 
int positivevalue = 0; 
int lessthan2 = 0; 
for(int a=0; a<buyer.Length; a++) 
{ 
if(buyer[a] == open || buyer[a]-open<0.50) 
    positivevalue++; 
if(buyer[a]-open<2) 
    lessthan2++; 
}