有关嵌套if语句的问题

时间:2015-08-07 12:51:36

标签: java if-statement

所以老师在白板上写的问题是:输入产品名称,数量,价格。计算总金额。如果总金额大于2000折扣是5%,如果总金额大于5000折扣是10%,如果大于10000折扣是20%

我知道你必须做这种格式。

if (cost > 2000)
 discount = 0.05;

我会先输入正确的内容,而不是像

String prodName;
int qty, price;
double cost;
double discount;

我知道我放错了但是我认为在执行嵌套if语句之前它的格式如何。我真的需要帮助。我不需要为此给出答案,因为它的勺子喂养到最高水平。我只需要一些指示和指南,以便找出要做的事情。

9 个答案:

答案 0 :(得分:1)

首先声明你所做的所有变量:

String prodName="";
int qty, price;
double cost; //your cost will be stored here
double discount =0;

然后进行计算

if (cost > 2000 && cost <= 5000)
   discount = 0.05;
else if(cost > 5000 && cost <= 10000){
   discount = 0.1;
}else if(cost > 10000){
   discount = 0.2;
}

答案 1 :(得分:1)

首先,你需要彻底阅读你的书。显然是this can be a good start。首先了解if-then的工作原理,然后了解if-then-else,最后if-then-else if-then-else。现在让我们分析一下你的问题:

  

输入产品名称,数量,价格。计算总金额。如果总金额大于2000,则折扣为5%,如果总金额大于5000,则折扣为10%,如果大于10000折扣为20%。

显然,你要设置一个变量,让我们调用它discount,并检查一些条件。有关说明,如果总金额大于10000 ,那么您将设置discount = 20%。但是要小心,当总金额 大于10000 时,它还会导致总金额 大于5000或2000 太!那你要分别设置discount = 10%还是discount = 5%?不,你不是。

因此,要解决您的问题,如果已经匹配了更高的优先级条件,则不会检查任何其他条件。所以我们将做以下事情:

discount;
total_amount = some Cost you calculated/inputted
if(total_amount > 10000) {
    discount = 0.2;
} else if(total_amount > 5000) {
    discount = 0.05;
} else if(total_amount > 2000) {
    discount = 0.01;
} else {
    discount = 0.00; // no discount for you coz total_amount less than or equal to 2000
}

现在发生了什么?如果第一个测试表达式是truetotal_amount > 10000),它将在其下方的大括号{ }内执行代码,并且不执行任何其他块。但是如果第一个测试表达式是false,它会检查第二个测试表达式(total_amount > 5000)。如果第二个测试表达式是true,它将在其下方的大括号{ }内执行语句,并且不会执行其他块。这个过程继续。如果所有测试表达式都是false,则执行else内的代码/ s,程序控制跳转到if-else以下。

当您完全理解if-else时,您可以通过多种方式解决此问题。祝你好运。

答案 2 :(得分:0)

只需几点,你就要比较一下价格,如果你按照相反的顺序进行比较,你可以这样做:

if (cost > 10000)
    discount = 0.2;
else if (cost > 5000)
    discount = 0.1;
else if (cost > 2000)
    discount = 0.05;

这很方便,因为你没有嵌套if语句而且它仍然是正确的。

答案 3 :(得分:0)

if (cost > 10000)
    discount = 0.2;
else if(cost > 5000){
    discount = 0.1;
}else if(cost > 2000){
    discount = 0.05;
} else {
    discount = 0;
}
double total = cost - (cost * discount);

当使用if和else ifs时,如果第一个if语句为true,则执行该代码并且不检查其他ifs。如果第一个if为false,那么如果跟随if,则按照它们出现的顺序检查。如果其中一个为真,那么执行该代码并且不检查其他代码。但是,如果没有,并且您有一个else块,代码将被执行。

答案 4 :(得分:0)

您可以按照问题的顺序进行嵌套,并询问是否更容易理解。我们只是根据需要更新折扣。请注意,其他答案可能更漂亮,但这是一种嵌套方式:

double cost = ...;
double discount = 0.0;

if (cost > 2000)
{
   discount = 0.05;
   if (cost > 5000) 
   { 
      discount = 0.10;
      if (cost > 10000)
      {
         discount = 0.20;
      } 
   }  
}

cost = cost - (cost * discount);

您可以向后执行此操作,也可以使用else ifelse语句执行此操作。

答案 5 :(得分:0)

if (cost > 10000)
    discount = 0.2;
else if (cost > 5000)
    discount = 0.1;
else if (cost > 2000)
    discount = 0.05;

答案 6 :(得分:0)

希望以下代码可以帮助你......

if (cost > 10000)
    discount = 0.2;
else if (cost > 5000)
    discount = 0.1;
else if (cost > 2000)
    discount = 0.05;
else
System.out.println("cost is less than 2000 hence no discount applied");

答案 7 :(得分:0)

在这种情况下,我不认为嵌套if语句是必要的。相反,您可以颠倒if语句的顺序,以便它首先检查cost > 10000,然后检查cost > 5000,最后检查cost > 2000

另外,如果您提到的净额是折扣后的成本,那么您可以在if语句后进行简单的计算。它看起来像这样:

double discount = 0;

if (cost > 10000){
    discount = 0.2;
}
else if(cost > 5000){
    //similar to above, won't spoon-feed this
}
else if(cost > 2000){
    //similar to above, won't spoon-feed this
}

double netAmount = cost * (1 - discount);

答案 8 :(得分:0)

我知道您要求嵌套if语句,但您可以使用ternary运算符严重缩短此问题的解决方案,尤其是因为这主要用于将值赋给{{1} }。可能比你想要的要复杂得多,但可以工作:

discount

简要说明

这就像嵌套的double cost, netAmount; //get cost double discount = cost > 10000 ? 0.2 : cost > 5000 ? 0.1 : cost > 2000 ? 0.05 : 0; netAmount = discount * cost; 语句一样,但如果写得不那么简单,那就更简洁了。每个布尔表达式,例如

if
根据所有布尔表达式,

被评估为或者是真或假。如果表达式返回true,则分配cost > 10000 运算符ternary之后的值。如果表达式返回false,则分配?之后的值。在这种情况下,如果cost大于10000,则分配值0.2。如果cost小于10000,我们想要评估另一个布尔表达式,所以我们嵌套另一个布尔表达式,如下所示:

:

最终cost > 10000 ? 0.2 : cost < 5000... 表示如果所有其他表达式计算为false,将分配什么值,就像:块中的终止else语句一样。