Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在某些测试中输出错误_Java_String_Math - Fatal编程技术网

Java 在某些测试中输出错误

Java 在某些测试中输出错误,java,string,math,Java,String,Math,我有一种方法有问题。在输入中我们有字符串,例如(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("+") <

我有一种方法有问题。在输入中我们有字符串,例如(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;
    }
public int getSign1(String str)
{
int-sign1;
if(str.indexOf(“+”)str.lastIndexOf(“(”)
sign2=str.lastIndexOf(“+”);
else if(str.lastIndexOf(“-”)>str.lastIndexOf(“(”)
sign2=str.lastIndexOf(“-”);
else sign2=-1;
返回标志2;
}
第二种方法始终有效,但第一种方法无效(请帮助我查找错误)

示例:
(1-2i)*(3-4i)


第一个方法返回-1,但不是2。为什么会出现这种情况?因为在表达式中:

(1-2i)*(3-4i)
您没有任何
+
字符,在看到以下内容后:

字符中最后一次出现的字符的索引 由该对象表示的序列,或-1(如果字符没有) 发生

然后你就知道为什么
str.lastIndexOf(“+”)
会是-1。当然它是
str.indexOf(“)”

因此
sign1
将为-1

您可以通过以下方式进行修复:

if(str.indexOf("+")!= -1 && str.indexOf("+") < str.indexOf(")"))
if(str.indexOf(“+”)=-1&&str.indexOf(“+”)
发生这种情况是因为在表达式中:

(1-2i)*(3-4i)
您没有任何
+
字符,在看到以下内容后:

字符中最后一次出现的字符的索引 由该对象表示的序列,或-1(如果字符没有) 发生

然后您知道为什么
str.lastIndexOf(“+”)
将为-1。当然是<
str.indexOf(“)”

因此
sign1
将为-1

您可以通过以下方式进行修复:

if(str.indexOf("+")!= -1 && str.indexOf("+") < str.indexOf(")"))
if(str.indexOf(“+”)=-1&&str.indexOf(“+”)
对于输入
(a-b*i)-(c-d*i)
,此字符串中没有“+”

public int getSign1(String str){
     if(str.indexOf("+") < str.indexOf(")")) 
                sign1 = str.indexOf("+");
..
}
public int getSign1(String str){
if(str.indexOf(“+”)
在这个方法中,如果你首先检查“+”,那么它不在那里,它的索引是-1,它小于
str.indexOf(“)”
索引,所以它的返回
-1
对于输入
(a-b*i)-(c-d*i)
,在这个字符串中没有“+”

public int getSign1(String str){
     if(str.indexOf("+") < str.indexOf(")")) 
                sign1 = str.indexOf("+");
..
}
public int getSign1(String str){
if(str.indexOf(“+”)

在这个方法中,如果您首先检查“+”,那么它不在那里,它的索引是-1,它小于
str.indexOf(“)”
索引,所以它的返回
-1

非常感谢。我忘了,非常感谢你。我忘了