有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的for循环不起作用

这是针对课堂作业,即:

编写一个程序 1.要求说明物品、购买年份、物品成本、折旧年限(估计寿命)和折旧方法。 2.显示项目的折旧计划,类似于下图所示的计划:

说明:电脑 购买年份:1994年 费用:2000 预计寿命:5年 折旧方法:双倍递减法 年度成本部门总金额部门。 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年 折旧方法:直线法 年度成本部门总金额部门。 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 2000.00 400.00 2000.00

这是我到目前为止的代码,我遇到的问题是当我输入折旧方法时,我的代码似乎并不关心我输入的是哪一种或什么,它只显示两种折旧方法。 下一个问题是,当一年正确地增加时,成本、折旧额和总折旧额却没有增加,我的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 );}


    }}

共 (2) 个答案

  1. # 1 楼答案

    Kon回答了你问题的第一部分

    第二个问题似乎是整数除法

    改变它

    deprec=(1/life)*cost;
    

    deprec=(1.0/life)*cost;
    

    你的其他方法中的除法也是。关于Stackoverflow,整数除法已经解释了很多次

    1/2 == 0因为整数除法,而

    1.0/2 == 0.5因为浮点除法


    另外,在main方法中,不允许有多个Scanner对象

  2. # 2 楼答案

    我注意到的第一个问题是,你在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),然后是分号,表示停止。这是与if语句关联的1行代码,一个空行。因此,无论语句是真还是假,它将跳转到下一个可执行行,这是一个简单的块,中间有一些“do-Toes”的东西。p>

    { do stuff }
    

    它每次都会执行,因为实际上没有与特定语句块相关联的条件