简体   繁体   中英

why is my for loop not working

This is for a class assignment, which is:

Write a program that 1. requests a description of the item, the year of purchase, the cost of the item, the number of years to be depreciated(estimated life), and the method of depreciation. 2. Displays a depreciation schedule for the item similar to the schedule shown below:

Description: Computer Year of purchase: 1994 Cost : 2000 Estimated Life: 5 Method of depreciation: Double-Declining Year Cost 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

Description: Computer Year of purchase: 1994 Cost : 2000 Estimated Life: 5 Method of depreciation: Straight-Line Year Cost Dep. 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

so here is my code so far, the problem(s) im having is when I input method of deprciation,my code doesnt seem to care which one or what I input, it just displays both methods of depreciation. Next problem is that while the year correctly gets incremented, the cost, depreciation amoutn and total depreciation dont, and i have equations for them in my for loop, which makes me confused. any help for advice would be appreciated.

    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 );}


    }}

Your first problem that I notice is that you made a small mistake with your if-statements.

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

The line above is coded incorrectly. You're putting semicolons after the if-statements, which cause the code blocks below to BOTH execute. Remove the semicolons.

The way to understand it is like this:

if (a > 5) {
    do stuff 
}

This code will "do stuff" if and only if the variable 'a' is greater than 5, BUT:

if (a > 5); {
    do stuff 
}

The compiler will read that as: if (a > 5), then semicolon, meaning stop. And that's your 1 line of code associated with the if-statement, an empty line. So whether the statement is true or false, it will skip to the next executable line, which is a simple block with some "do stuff" stuff in the middle.

{ do stuff }

Which it will execute everytime because there is actually no associated conditional to THAT particular statement block.

Kon answered the first part of your question.

The second problem seems to be integer division.

To fix it change

deprec=(1/life)*cost;

to

deprec=(1.0/life)*cost;

and the division in your other method also. Integer division has been explained many times on Stackoverflow.

1/2 == 0 because of Integer division, while

1.0/2 == 0.5 because of floating point division.


Also, you don't more than one Scanner object in your main method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM