为什么当我输入少于201时,它也运行最后一个if语句我不进入理解

时间:2015-10-08 16:38:38

标签: java

我不明白为什么当我输入少于200时这个代码不能正常工作的原因然后最后如果语句也执行可以让任何人说出问题。

这个代码的主要问题是无法正常工作

    public class main {
    public static void main(String args[]){
    Scanner input=new Scanner(System.in);

    double unit   ;
    double extra;
    double total_unit;

    System.out.println("enter total unit");

    unit=input.nextInt();

    if(unit >=1 && unit <=200){

    unit=unit *8;

    System.out.println(" bill of 200 units is "+ unit);

    }

    if(unit  >=201 && unit <=300){

     extra = unit - 200;

     extra= extra * 10;

     total_unit = 200 * 8 + extra;

     System.out.println("Total bill is: " + total_unit); 

    }

    if(unit >=301 && unit<=400){

     extra=unit-300;

    extra=extra *15;

    total_unit=200*8 +100*10+ extra;

    System.out.println("total bill of more than 300 units is "+total_unit);

    }  

    if(unit >=401 && unit<=500){

     extra=unit-400;

    extra=extra*20;

     total_unit=200*8+ 100*10 + 100*15 + extra ;

    System.out.println("total bill between 401 to 500 units" + total_unit);

        }

     if(unit>501){  

     extra=unit-500;

    System.out.println("unit consumed  " + extra + "  that above");

    extra=extra *25;

    System.out.println("------------unit above 500 bill-------- \n"   +extra);
     total_unit=200*8 + 100*10 +100*15 +100*20 + extra;

    System.out.println("---------total bill----------\n  " +     total_unit);

    }

    }

    }

2 个答案:

答案 0 :(得分:0)

我在代码中写了答案为什么它执行第二个条件读取代码中的注释。如果你有任何发表评论

 //here your reading the unit value as ex: 190
 unit=input.nextInt(); 

 if (unit >= 1 && unit <= 200) {
        //here your changin the  unit value to 190 * 8 so now unit value is 1520
        unit = unit * 8;
        System.out.println(" bill of 200 units is " + unit);
  }
 //now here your given value is 190 but unit value is changed to 1520    here condition true, that is the reason second condition also excecuting.
 if (unit > 501) {
        extra = unit - 500;
        System.out.println("unit consumed  " + extra + "  that above");
        extra = extra * 25;
        System.out.println("------------unit above 500 bill-------- \n"
                + extra);
        total_unit = 200 * 8 + 100 * 10 + 100 * 15 + 100 * 20 + extra;
        System.out
                .println("---------total bill----------\n  " + total_unit);
    }

答案 1 :(得分:0)

问题是因为当您输入小于201 的数字时,您的第一个if语句将按如下方式执行:

if(unit >=1 && unit <=200){
    unit=unit*8; //Problem is here. Use another variable such as unitTemp = unit*8
    System.out.println(" bill of 200 units is " + unit); //Use unitTemp here too
}

此处,任何小于200 的数字将乘以8并分配给相同的unit变量,请注意更新的unit变量将在遵循if条件,而不是用户输入的先前值。

更新:我还建议在你的第一个else if语句之后的每个语句中使用if,这样它只会被执行一次,因此你的问题就会消失,但这只是你特定问题的一个技巧(如果你只使用这个else if解决方案)所以为了更好地拥有一个有意义的代码,我建议使用这两种策略。这里不需要它,因为我的上述解决方案可以有效地工作,但在不久的将来,最终你会。