Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Recursion - Fatal编程技术网

Java 递归语句中声明的变量是创建新变量还是刷新原始变量?

Java 递归语句中声明的变量是创建新变量还是刷新原始变量?,java,string,recursion,Java,String,Recursion,“输入”是一个字符串,它应该是一个等式,如: 12+8*2^(1/4)+2/(2*7)+(5*(1/2)) 调用语句时,在本例中,该语句应始终为“readLine(0);” 它会将一个整数“i”设置到它找到的第一个位置“(”at.if语句检查该整数是否返回了任何内容(-1表示“未找到”)。因此,如果它找到一个“(”),它将再次运行该方法,但参数将是“(”字符串中的索引它找到了+1。递归将继续,直到它找不到更多的“(”。我将是“(”)的最后一个出现在字符串中。它们创建了新的变量。每个递归调用都有自

“输入”是一个字符串,它应该是一个等式,如:

12+8*2^(1/4)+2/(2*7)+(5*(1/2))

调用语句时,在本例中,该语句应始终为“readLine(0);”
它会将一个整数“i”设置到它找到的第一个位置“(”at.if语句检查该整数是否返回了任何内容(-1表示“未找到”)。因此,如果它找到一个“(”),它将再次运行该方法,但参数将是“(”字符串中的索引它找到了+1。递归将继续,直到它找不到更多的“(”。我将是“(”)的最后一个出现在字符串中。它们创建了新的变量。每个递归调用都有自己的变量集。对于每个调用,新的变量集被推送到堆栈上。当调用结束时,变量从堆栈中弹出(后进先出)。

您可能想尝试的测试是:

public void readLine(int startAt){
    int i = input.indexOf("(",startAt);

    if(i!=-1){
        readLine(i+1);
    }
}
你得写点东西来交换


它对原语(int)的作用可能与对扩展对象(Integer)的事物的作用不同,对这些对象的数组的作用也不同。

这在某种程度上不起作用吗?你到底在问什么?递归调用不共享变量。因此,当没有更多的括号时,计算停止?每次递归调用都会创建一个新的变量的“实例”。这是一个很好的讲座,详细解释了它。您应该详细说明,提到按值传递参数。现在答案是正确的,但它没有解释为什么会发生这种情况。参数是如何传递的在这里不是特别相关。神奇的词是“堆栈”:对于每个调用,在堆栈上分配一组新的局部变量。一个额外的位;在Java中,它们创建尽可能浅的副本。
int x = 1;
int y = 2;
swap(x, y);
System.out.println("x:" + x);
System.out.println("y:" + y);