Java 如何准确比较字符串?
我有一个函数,其中接受一个字符串和2 int。该函数根据字符串的内容,对2个数字执行操作 我的默认案例总是运行,即使我通过了“+”、“-”等。我不知道为什么。 代码如下:Java 如何准确比较字符串?,java,android,arrays,android-intent,switch-statement,Java,Android,Arrays,Android Intent,Switch Statement,我有一个函数,其中接受一个字符串和2 int。该函数根据字符串的内容,对2个数字执行操作 我的默认案例总是运行,即使我通过了“+”、“-”等。我不知道为什么。 代码如下: public int evaluateAnswerTwoOperations(String operation, int numberOne, int numberTwo) { switch(operation){ case "+": Log.d("usingsubtrac
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;
}
有人知道为什么吗?因为每个开关都只使用长度为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;
}
}
如果代码始终运行
默认值
大小写,则与string.equals()
相比,传入的字符串不等于任何其他大小写。转储该参数的值(可能用尖括号括起来以显示空格和/或其十六进制表示形式),以查看得到的是什么,而不是您认为得到的是什么…此问题可能由以下问题引起:
public int evaluateAnswerTwoOperations(字符操作、int numberOne、int numberTwo)
然后做其余的比较
您的问题的其他可能解决方案可以是:
在默认情况下,您必须引入另一个开关情况来与*进行比较,而不是相乘。在默认情况下,打印一个错误。。所以如果两种情况都不完美匹配。。错误将被打印传统上,
开关
只能用于基本类型,如int
、long
、char
、short
和enum
。我不确定,但据我所知,Android在最新版本中也不支持带String
的switch
,但在旧版本中肯定不支持,因此,正如其他答案所建议的,您可能希望使用并传递char
而不是String
,由于缺乏对行动的支持
但是,在Java 7上,已经支持带有字符串的开关。例如:
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?");
}
}
}
.不可能重复,请检查部署的代码是否是最新的,同时检查输入的尾随/前导空格return
是return
在@anaxin之后(除非您使用try/finally)@anaxin,它需要使用char
而不是String
。就我所知,您在这里给出的代码看起来是正确的,因此错误可能发生在其他地方。我建议添加一个Log.d()
调用来打印操作的值。您应该在值的周围加引号,以便可以看到可能导致问题的空白。未经请求的建议:您应该明确使用大小写“*”:
进行乘法运算,并使用默认值:
打印适当的错误消息。虽然这绝对是一个好建议,它不会改变预期的行为,也不会指出OP原始代码中的错误。