【问题标题】:Operator difference: +=, ==, +, ++, = [closed]运算符区别:+=、==、+、++、= [关闭]
【发布时间】:2020-02-11 05:42:20
【问题描述】:

我正在学习如何使用 switch,但是我使用了不同的运算符并且程序无法运行。只有= 操作员工作。为什么其他运算符(+===+++)在这种情况下不起作用?

我是 Java 初学者,请帮我解答这个幼稚的问题。

double shippingCost;

switch (shipping) {
  case "Regular":
    shippingCost + 0;
    break;
  case "Express":    
    shippingCost + 1.75;
    break;
  default:
    shippingCost + .50; 
}

return shippingCost;

【问题讨论】:

  • Java 不允许您仅根据 shippingCost + 0 之类的值表达式进行声明。没有意义。
  • 如果要修改shippingCost的值,需要使用+=。否则,加法结果丢失。
  • 其他问题:变量shippingCost 未初始化。
  • @CaiusJard 我认为他的目标是改变变量的值,但当然,我不能确定。

标签: java operators


【解决方案1】:

首先您必须了解这些运算符的用法。 += 运算符通常用于同时求和和分配任务时。例如,在给定的代码中,“+=”运算符用于向变量添加值并将其一次性存储在该变量中。

'==' 运算符用于比较目的,在这种情况下 switch 会在后台自动进行。就像在我们的例子中一样,将 shipping 变量与不同的 case 语句进行比较。 '+' 运算符只是对一些值求和。在您的情况下,您只是将值添加到 shippingCost 变量中,而不是将其存储在任何变量中。 '++' 运算符是将变量的值加 1。

为我工作的示例代码如下: 要纠正的两件事是在您的代码中使用 shippingCost 变量之前使用一些值初始化它,以及分别使用 += 运算符或 + 和 = 运算符添加一些值并将其分配给变量。 希望对你有帮助。

String shipping = "Regular"
double shippingCost=0;
switch (shipping) {
    case "Regular":
            shippingCost += 0;
            break;
    case "Express":    
            shippingCost += 1.75;
            break;
    default:
            shippingCost += .50; 
}
return shippingCost;

【讨论】:

    【解决方案2】:

    您现在只是在制作表达式,您要做的是将表达式分配给某物。

    为了更好地理解代码

    shippingCost + 1.75 
    

    返回一些值,你要做的就是把它赋值给某个东西。

    如果您希望该值等于该值加上某个值,则正确的语法应该是

    variable += value
    

    所以在你的例子中你可能想要

    shippingCost += 1.75
    

    如果你想使用

    ==
    

    您可以将其视为一个返回布尔值的表达式,也就是一个真或假值。您可以像使用任何值一样将其分配给变量。或者您可以简单地使用该值。

    【讨论】:

      【解决方案3】:

      在 Java 中 + 运算结果需要赋值给目标变量,例如

      a = 1+2;
      

      += 是向一个变量添加值并将结果分配给它自己的简写。

      a += 5; // is equivalent to a=a+5;
      

      == 仅用于比较,比如说

      if(a==b) { //do something}
      

      ++ 用于增加一个数字,通常是整数

      int a=1;
      a++; //is equivalent to a=a+1;    a=2 after running this statment.
      

      【讨论】:

        【解决方案4】:

        这些补充都不是完整的陈述。我认为您的期望可能是 shippingCost+1 等会导致 shippingCost 增加 1,但事实并非如此——如果这样做的话,仅做一些基本的数学运算就会让事情变得非常尴尬:

        print(productCost + packagingCost + shippingCost);
        

        如果执行求和,会在变量中存储一些东西,这会很快变得混乱;所有这些变量在每次打印时都会增加

        我们必须明确我们想要发生的事情。如果您希望 shippingCost 增加 1,我们必须计算并存储结果:

        shippingCost = shippingCost + 1;
        

        或者使用++,定义为“变量加一”,或者使用+=,定义为“将左边的变量增加右边的值”

        以下是完整语句的其他示例:

        shippingCost = 0;
        
        shippingCost++;
        
        shippingCost += 2;
        
        if(shippingCost == 3)
          doSomething();
        

        这不是声明:

        shippingCost + 1;
        

        除非您包含其他使用值结果的内容,如下所示:

        shippingCost = shippingCost + 1;
        
        double newShippingCost = shippingCost + 1;
        
        print(shippingCost + 1);
        

        在 Java 中,计算一个结果而不做任何事情,这不是一个合法的完整语句。我给出的完整陈述的例子确实对结果有所帮助。大多数情况下,他们将结果(返回)存储到 shippingCost 变量中。从 0 开始,购物成本随后递增,然后再次递增,最后与值 3 进行比较(这将产生一个 true)

        【讨论】:

        • do() ? do 是关键字,因此不能用作方法名...
        • 已排序,谢谢@dan1st
        【解决方案5】:

        只有= 操作员有效。为什么其他运算符(+===+++)在这种情况下不起作用?

        其他运算符会导致编译错误,但原因不同。


        运算符==+ 进行比较或加法,得到一个新值,没有任何副作用。如果你把a + b;写成一个语句,那么这个语句对你的程序做什么没有影响;理论上它可以添加两个数字,但是结果不用于任何事情,因此该操作实际上什么都不做。

        在这些情况下编译器会报告错误,因为您不会故意编写什么都不做的代码,因此代码不能按照您的意图执行,编译器会告诉您。


        运算符+=++ 确实有副作用,但这些会给您带来编译错误,原因不同。当你声明一个像 double shippingCost; 这样没有初始值的局部变量时,你不能在表达式中使用这个变量,直到它被其他表达式 definitely assigned 之后。

        这意味着如果你写了类似System.out.println(shippingCost); 的东西,你会得到一个编译错误,因为你试图打印一个变量的值,但该变量还没有分配给它的值,所以没有可以打印的值。同样,如果您写shippingCost += 1.75shippingCost++,那么您正在尝试向旧值添加一些内容,但是没有要添加的旧值。因此存在编译错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-16
          • 2014-10-28
          • 2013-07-06
          • 2016-01-15
          • 1970-01-01
          • 1970-01-01
          • 2011-05-24
          相关资源
          最近更新 更多