2013-10-28 231 views
0

我試圖在此代碼中插入「if」語句,但它不能很好地工作。其固定工資和獎勵(37.28 * 1.32)將給予94,261.02一次。低於94,261.02只是一個普通的37.28佣金。所有iny「int」行用紅色加下劃線顯示!分數。所以我試圖找出問題:如何使用「if」語句

 System.out.println("Enter your annual sales"); 
     String annual = input.nextLine(); 

     int salary = 7550281; 
     int commission = 38_28; 
     int compensation = Integer.parseInt(annual) * commission + salary; 
     System.out.println("compensation is: "+compensation); 

     if (Integer.parseInt(annual) < 92416_02) { 
      int salary = 7550281; 
      int commission = 37_28 * 1_32; 
      int compensation = Integer.parseInt(annual) * commission + salary; 
      System.out.println("compensation is: "+compensation); 

     } else if (Integer.parseInt(annual) > 92416_02){ 
     int salary = 7550281; 
     int commission = 38_28; 
     int compensation = Integer.parseInt(annual) * commission + salary; 
     System.out.println("compensation is: "+compensation); 
     } 

謝謝。

+0

@MadProgrammer Java 1.7允許在數值中使用_,以獲得更好的表示/可讀性。 – Batty

+0

自編譯器版本「1.6」以來我們不支持使用'_'的數字,現在我們就像'7' ... –

+0

@Batty嚴重嗎?這使得更好的介紹:P – MadProgrammer

回答

0

使用花車和.代替_,如:float commission = 38.28;

0

我修改你的代碼,因爲你沒有提供完整的代碼塊,我通過我的想象做的代碼段。我建議你使用BigDecimal類來進行更精確的計算。 '

import java.util.Scanner;   
public class stack_overflow { 
    public static void main(String args[]){ 
     System.out.println("Enter your annual sales"); 
     Scanner input = new Scanner(System.in); 
     String annual = input.nextLine(); 
     double salary = 7550281; 
     double commission = 38.28; 
     double compensation = Double.parseDouble(annual) * commission + salary; 
     System.out.println("compensation is: "+compensation); 

     if (Double.parseDouble(annual) < 92416.02) { 
      salary = 7550281; 
      commission = 37.28 * 1.32; 
      compensation = Double.parseDouble(annual) * commission + salary; 
      System.out.println("compensation is: "+compensation); 

     } else if (Integer.parseInt(annual) > 92416.02){ 
      salary = 7550281; 
      commission = 38.28; 
      compensation = Integer.parseInt(annual) * commission + salary; 
      System.out.println("compensation is: "+compensation); 
    } 
} 
+0

將它改爲double可以幫助,但它會弄亂我的代碼,當我插入它。我的整數補償線以紅色加下劃線 –

2

很多問題將歸結爲您正在使用的Java版本。

目前,讓我們假設你正在使用的Java 7和38_28是一個有效的聲明,則在每次if

// Declared here... 
int salary = 7550281; 
int commission = 38_28; 
int compensation = Integer.parseInt(annual) * commission + salary; 
if (Integer.parseInt(annual) < 92416_02) { 
    // Redeclared here... 
    int salary = 7550281; 
    int commission = 37_28 * 1_32; 
    int compensation = Integer.parseInt(annual) * commission + salary; 
} else if (Integer.parseInt(annual) > 92416_02) { 
    // Redeclared here... 
    int salary = 7550281; 
    int commission = 38_28; 
    int compensation = Integer.parseInt(annual) * commission + salary; 
} 

這不是必需的範圍內重新聲明的變量。你只需要一次聲明它們,例如...

int salary = 7550281; 
int commission = 38_28; 
int compensation = Integer.parseInt(annual) * commission + salary; 
if (Integer.parseInt(annual) < 92416_02) { 
    salary = 7550281; 
    commission = 37_28 * 1_32; 
    compensation = Integer.parseInt(annual) * commission + salary; 
} else if (Integer.parseInt(annual) > 92416_02) { 
    salary = 7550281; 
    commission = 38_28; 
    compensation = Integer.parseInt(annual) * commission + salary; 
} 

我想你也將使用longint,以防止任何可能的溢出會更安全

尼特挑

你也一再地轉換annual值。雖然它沒有什麼問題,但它確實會使代碼混亂並使其難以閱讀。它會建議將其轉換一次,簡單地重新使用所得到的值,例如...

int annualAmount = Integer.parseInt(annual); 
if (annualAmount < 92416_02) { 
    //... 
    compensation = annualAmount * commission + salary; 
} else if (annualAmount > 92416_02) { 
    //... 
    compensation = annualAmount * commission + salary; 
} 
+0

+1好乾淨的描述。 –

0

你的代碼具有以下問題:

  1. 局部變量重複(工資,報酬和佣金被宣佈兩次)。如果要將值分配給已存在的變量,則不應在變量名稱前面指定類型(此處爲int)。
  2. 您的乘法無效。 37_28 * 1_32給出492096。下劃線根本不重要。你可能不得不將結果除以100來賦予它邏輯意義。
  3. 當年份恰好是92416_02時,您的代碼無法處理這種情況。刪除else if子句並初始化您的commission,或者僅使用else而不遵循if。另外,由於有很多共同的線,你可以將它們從塊中移出。

還要注意,用戶必須輸入他們的年度乘以100,因爲parseInt不會識別下劃線。否則,此代碼可能可以做你想做的事情: System.out.println(「輸入你的年銷售額」); 字符串年度=輸入。nextLine();

int salary = 7550281; 
    int commission = 38_28; 
    if (Integer.parseInt(annual) < 92416_02) { 
     commission = 37_28 * 1_32/100; 
    } 
    int compensation = Integer.parseInt(annual) * commission/100 + salary; 
    System.out.println("compensation is: "+compensation); 

P.S.不要聽那些建議使用花車或雙打進行計算的人 - 這是一個糟糕的,容易出錯的練習,因爲計算錯誤會隨着時間的推移而積累。使用int,long,BigInteger或BigDecimal(使用String構造函數)

+0

嗯,我喜歡這個如何與我沒有需要使用委員會的其他聲明。謝謝。它運行但符合以下錯誤:線程「main」中的異常java.lang.RuntimeException:不可編譯的源代碼 - 變量工資已經在方法main(java.lang.String [])中定義,在commission.main()中已經定義了 \t。 java:24) Java結果:1 –

+0

@MoMarks,這是因爲_variable工資已被定義。看看你的整個源代碼,這段代碼編譯沒有問題。 –