我有一个函数,它需要一个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;
}
任何人都知道为什么?
答案 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)
此问题可能由以下问题引起:
因此,您只需检查是否在函数中传递了正确的值。通过将CHAR而不是STRING传递给函数可以避免这种情况(这是+, - ,/和*的好方法)...
用这个
public int evaluateAnswerTwoOperations(char operation, int numberOne, int numberTwo)
并进行其余的比较。
您的问题的其他可能解决方案可以是:
而不是默认情况下的乘法您必须引入另一个Switch案例以与*进行比较。并且在默认情况下打印错误..所以如果两种情况都没有完美匹配..将打印错误
答案 3 :(得分:0)
传统上,switch
仅适用于基本类型,例如int
,long
,char
,short
和enum
。我不确定,但就我没有弄错,Android在最新版本中不支持switch
和String
,但肯定不支持旧版本,因此,建议的其他答案,由于缺乏对操作的支持,您可能希望使用并传递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?");
}
}
}