CPP和Java给出不同的输出
我有两套代码。一个在CPP中,另一个在java中。这两套代码似乎是相同的,但他们给我不同的输出。我在这里完全困惑。我对cpp很陌生。请帮忙。CPP和Java给出不同的输出
CPP代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
int helper(vector<vector<int> > table, int i, int j) {
if (i < 0 || j < 0 || i >= 4 || j >= 4) return 0;
if (table[i][j] == 1) return 0;
if (i == 3 && j == 3) return 1;
table[i][j] = 1;
return helper(table, i, j+1) + helper(table, i+1, j) + helper(table, i, j-1) + helper(table, i-1, j);
}
int main(int argc, char *argv[]) {
vector<vector<int> > table;
vector<int> x(4,0);
for (int i = 0; i < 4; ++i)
table.push_back(x);
cout << helper(table, 0, 0) << endl;
return 0;
}
输出:184 链接:http://cpp.sh/2xeee
Java代码:
public class Solution{
int helper(int[][] table, int i, int j) {
if (i < 0 || j < 0 || i >= 4 || j >= 4) return 0;
if (table[i][j] == 1) return 0;
if (i == 3 && j == 3) return 1;
table[i][j] = 1;
return helper(table, i, j+1) + helper(table, i+1, j) + helper(table, i, j-1) + helper(table, i-1, j);
}
public static void main(String[] args){
int[][] table=new int[4][4];
for(int i=0; i<4; i++)
for(int j=0; j<4; j++) table[i][j]=0;
System.out.println(new Solution().helper(table,0,0));
}
}
输出:2 链接:http://ideone.com/e.js/U9X1FX
在Java中,桌子交给奥雅纳r通过引用给帮手。在C++中,每次调用都会复制该表。
为了使C++的行为,如Java,改变助手呼吁采取一个参考:
int helper(vector<vector<int> >& table, int i, int j) {
编辑:为了使Java行为像原来的C++代码,你需要受影响的部分复制的表格。将帮手更改为:
int helper(int[][] original, int i, int j) {
if (i < 0 || j < 0 || i >= 4 || j >= 4) return 0;
if (original[i][j] == 1) return 0;
if (i == 3 && j == 3) return 1;
int[] table = new int[4][];
System.arraycopy(original, 0, table, 0, 4);
table[i] = new int[4];
System.arraycopy(original[i], 0, table[i], 0, 4);
table[i][j] = 1;
return helper(table, i, j+1) + helper(table, i+1, j) + helper(table, i, j-1) + helper(table, i-1, j);
}
我如何在这里使java的行为像cpp? @Stefan Haustein –
这是更多的工作:在助手中,将表参数重命名为原始,然后构建一个新表,其中包含从原始复制的所有元素。 –
p.s.你只需要复制,如果你改变表 –
欢迎来到Stack Overflow!请[参观](http://*.com/tour)以查看网站的工作原理和问题,并相应地编辑您的问题。另请参阅:[如何创建最小,完整和可验证示例](http://*.com/help/mcve) –
*两组代码似乎都是相同的* - Java不是C++。只是因为代码看起来相同,事实并非如此。 – PaulMcKenzie
你不需要用零填充'table'数组的循环。 Java编号数组总是预先填充0. – Boann