我在一种方法中遇到麻烦。在输入中我们有字符串,例如(a + -b * i)某个符号(c + -d * i)。程序必须计算此结果并输出结果。我需要在第一个括号中取符号索引,在第二个括号中取索引。而且我的计划将会有效。但是,当仅在输入(a-b * i) - (c-d * i)或(a-b * i)*(c-d * i)时,方法返回错误的结果-1。
我的方法有两个括号。
public int getSign1(String str)
{
int sign1;
if(str.indexOf("+") < str.indexOf(")"))
sign1 = str.indexOf("+");
else if(str.indexOf("-", 2) < str.indexOf(")"))
sign1 = str.indexOf("-", 2);
else sign1 = -1;
return sign1;
}
public int getSign2(String str)
{
int sign2;
if(str.lastIndexOf("+") > str.lastIndexOf("("))
sign2 = str.lastIndexOf("+");
else if(str.lastIndexOf("-") > str.lastIndexOf("("))
sign2 = str.lastIndexOf("-");
else sign2 = -1;
return sign2;
}
第二种方法总是有效,但不是第一种方法(请帮我查找错误)。
示例:(1-2i)*(3-4i)
第一种方法是返回-1,但不是2.为什么?
答案 0 :(得分:4)
这是因为在表达式中:
(1-2i)*(3-4i)
您没有+
个字符,并在看到String#lastIndexOf之后:
字符中最后一次出现的字符的索引 此对象表示的序列,,如果字符不是,则为-1 发生强>
然后你知道为什么str.lastIndexOf("+")
将为-1。它当然&lt; str.indexOf(")")
。
所以sign1
将为-1。
你可以通过以下方式修复它:
if(str.indexOf("+")!= -1 && str.indexOf("+") < str.indexOf(")"))
答案 1 :(得分:1)
对于输入(a-b*i)-(c-d*i)
,此字符串中没有“+”。
public int getSign1(String str){
if(str.indexOf("+") < str.indexOf(")"))
sign1 = str.indexOf("+");
..
}
首先,如果你检查'+',那么首先它不存在,它的索引是-1,它小于str.indexOf(")")
索引,所以它的回归-1
。