如何准确比较字符串?

时间:2016-02-08 19:09:33

标签: java android arrays android-intent switch-statement

我有一个函数,它需要一个String和2个int。该函数取决于字符串是什么,对2个数字执行操作。

即使我传递“+”,“ - ”等,我的默认情况也会一直运行。我不知道为什么。 这是代码:

 public int evaluateAnswerTwoOperations(String operation, int numberOne, int numberTwo) {

    switch(operation){

        case "+":
            Log.d("usingsubtraction","plus2nmbers");
            return numberOne + numberTwo;
        case "-":
            Log.d("usingsubtraction","usingsubtraction");
            return  numberOne - numberTwo;
        case "/":
            Log.d("usingsubtraction","usingdivision");
            return numberOne / numberTwo;
        default:
            Log.d("usingsubtraction","usingmultiplication");
            return numberOne*numberTwo;

    }

任何人都知道为什么?

4 个答案:

答案 0 :(得分:0)

由于您只为每个交换机案例使用长度为1的字符串,我宁愿使用char。请尝试以下方法:

public int evaluateAnswerTwoOperations(char operation, int numberOne, int numberTwo) {

    switch(operation){

        case '+':
            Log.d("usingsubtraction","plus2nmbers");
            return numberOne + numberTwo;
        case '-':
            Log.d("usingsubtraction","usingsubtraction");
            return  numberOne - numberTwo;
        case '/':
            Log.d("usingsubtraction","usingdivision");
            return numberOne / numberTwo;
        default:
            Log.d("usingsubtraction","usingmultiplication");
            return numberOne*numberTwo;

    }
}

答案 1 :(得分:0)

如果代码始终运行default大小写,则传入的字符串不等于任何其他情况,与String.equals()进行比较。转储该参数的值,可能包含在尖括号中以显示空格和/或其十六进制表示,以查看到达那里的内容,而不是您认为到达那里...

答案 2 :(得分:0)

此问题可能由以下问题引起:

  1. 您的字符串与您的任何案例都无法比较。
  2. 您在函数中传递的值确实包含一些易受攻击的值
  3. 因此,您只需检查是否在函数中传递了正确的值。通过将CHAR而不是STRING传递给函数可以避免这种情况(这是+, - ,/和*的好方法)... 用这个 public int evaluateAnswerTwoOperations(char operation, int numberOne, int numberTwo) 并进行其余的比较。

    您的问题的其他可能解决方案可以是:

    而不是默认情况下的乘法您必须引入另一个Switch案例以与*进行比较。并且在默认情况下打印错误..所以如果两种情况都没有完美匹配..将打印错误

答案 3 :(得分:0)

传统上,switch仅适用于基本类型,例如intlongcharshortenum。我不确定,但就我没有弄错,Android在最新版本中不支持switchString,但肯定不支持旧版本,因此,建议的其他答案,由于缺乏对操作的支持,您可能希望使用并传递char而不是String

但是,在Java 7上,switch已经支持String。例如:

package dustin.examples;

import static java.lang.System.out;

/**
 * Simple class demonstrating switch on Strings available with JDK 7.
 */
public class StringsWithSwitchDemo
{
   /**
    * Main executable function.
    *
    * @param arguments Command-line arguments: none expected.
    */
   public static void main(final String[] arguments)
   {
      final String name =   arguments.length > 0
                          ? arguments[0]
                          : "Dustin";

      switch (name)
      {
         case "Dino" :
            out.println("Flintstones?");
            break;
         case "Neo" :
            out.println("Matrix?");
            break;
         case "Gandalf" :
            out.println("Lord of the Rings?");
            break;
         case "Dustin" :
            out.println("Inspired by Actual Events");
            break;
         default :
            out.println("The Good, the Bad, and the Ugly?");
      }
   }
}

Source