2013-07-07 211 views
2

這是一個課堂作業,那就是:爲什麼for循環不工作我

寫一個程序 1.請求項目的說明,購買的一年,該項目的成本,折舊年限(預計使用年限)和折舊方法。 2.顯示如下圖所示的類似安排的項目折舊時間表:

描述:計算機 購買的年份:1994 費用:2000 估計的使用壽命:折舊的5 方法:雙下降 年的成本DEP的保護。 Amt Tot Dep。 1994年2,000.00 800.00 800.00 1995年1,200.00 480.00 1280.00 1996年720.00 288.00 1568.00 1997年432.00 172.80 1740.80 1998年259.20 259.20 2000.00

描述:計算機 購買的年份:1994 費用:2000 估計的使用壽命:5 方法折舊:直線 年成本部分。 Amt Tot Dep。 1994 2,000.00 400.00 400.00 1995 2,000.00 400.00 800.00 1996 2,000.00 400.00 1,200.00 1997 2,000.00 400.00 1,600.00 1998 2,000.00 400.00 2,000.00

所以這裏是到目前爲止我的代碼,所遇到的問題(多個)IM是,當我輸入方法貶值,我的代碼似乎不關心哪一個或我輸入什麼,它只顯示兩種折舊方法。 下一個問題是,雖然年正確得到增加,成本,折舊amoutn和總折舊dont,並且我有他們在我for循環,這使我感到困惑。任何幫助建議,將不勝感激。

package proj3; 

    import java.io.Console; 
    import java.util.Scanner; 

public class depre { 

public static void main(String [] args){ 



    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter item description: "); 
    String item=sc.nextLine(); 

    Scanner sc1 = new Scanner(System.in); 
    System.out.print("What year was it purchased? "); 
    int year =sc1.nextInt(); 

    Scanner sc2 = new Scanner(System.in); 
    System.out.print("How much did it cost? "); 
    int cost = sc2.nextInt(); 

    Scanner sc3=new Scanner(System.in); 
    System.out.print("What is its estimated life? "); 
    int life=sc3.nextInt(); 

    Scanner sc4= new Scanner(System.in); 
    System.out.print("What is the method of depreciation? Straight-Line or Double-Declining? "); 
    String input = sc4.nextLine(); 
    if (input.equals("Straight-Line"));{ 
     SingleDep(item, year, cost, life, input);} 
    if (input.equals("Double-Declining")); 
    {DoubleDep(item, year, cost, life, input);} 




    } 


    public static void SingleDep(String item, int year, int cost, int life, String input) 
    { 
     float price=cost; 
    float deprec; 
     int age; 
     float totaldeprec=0f; 
     System.out.printf("Year  Cost  Dep. Amt  Tot Dep.\n"); 

     for (int i = 0; i < life; i = i+1) { 
      age = year + i; 
      deprec=(1/life)*cost; 
      totaldeprec=deprec+totaldeprec; 
      price=(price-deprec); 
      System.out.printf("%2d  %7.2f  %7.2f  %7.2f\n", age,price,deprec,totaldeprec); 


     } 
    } 



    public static void DoubleDep(String item, int year, int cost, int life, String input) 
    { double price = cost; 
     double deprec; 
     int age; 
     double totaldeprec=0; 
     System.out.printf("Year  Cost  Dep. Amt  Tot Dep.\n"); 
     for (int i = 0; i < life; i = i+1) { 
      age = year + i; 

      deprec = (2/life) * cost; 

      totaldeprec =totaldeprec+ deprec; 

      price = price-deprec; 
      System.out.printf("%2d  %7.2f  %7.2f  %7.2f\n", age,price, deprec, totaldeprec);} 


    }} 
+0

感謝Kon,這解決了我的第一個問題!現在爲我的循環... –

+0

當我通過你的代碼,我注意到你不會初始化SingleDep(..)或DoubleDep(..)方法中的原始變量。在對它們進行操作之前,您應該將它們初始化爲0或您需要的任何值。 – Kon

回答

5

我注意到你的第一個問題是你用if語句犯了一個小錯誤。

if (input.equals("Straight-Line"));{ 
    SingleDep(item, year, cost, life, input);} 
if (input.equals("Double-Declining")); 
{DoubleDep(item, year, cost, life, input);} 

上面的代碼編碼不正確。你在if語句之後加分號,這會導致下面的代碼塊被執行。刪除分號。

的方式去理解它是這樣的:

if (a > 5) { 
    do stuff 
} 

此代碼將「做的東西」,當且僅當變量「a」大於5,但:

if (a > 5); { 
    do stuff 
} 

編譯器會將其讀爲:if(a> 5),然後是分號,意思是停止。這就是你的1行代碼,與if語句相關聯,這是一條空行。因此,無論聲明是真還是假,它都會跳到下一個可執行行,這是一個簡單的塊,中間有一些「do stuff」東西。

{ do stuff } 

它會每次執行,因爲實際上沒有與該特定語句塊關聯的條件。

+0

非常感謝,我只是嘗試了與我的循環相同的邏輯,它說每個條件後都需要分號。是對的嗎? –

+1

@AbdullahTamimi:是的,在初始化之後需要有一個分號,而for循環中的條件,而不是在更新之後。 – jlordo

+0

沒問題,是的,jlordo是正確的for循環結構。 – Kon

1

Kon回答了您的問題的第一部分。

第二個問題似乎是整數除法。

要修復它改變

deprec=(1/life)*cost; 

deprec=(1.0/life)*cost; 

和部門在通過另一種方法也。整數部分已經在Stackoverflow上解釋了很多次。

1/2 == 0因爲整數除法,而因爲浮點除法的

1.0/2 == 0.5


此外,您在main方法不要超過一個Scanner對象。

+0

非常感謝你,不要一定要修復掃描儀。 –