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

+0

欢迎来到Stack Overflow!请[参观](http://*.com/tour)以查看网站的工作原理和问题,并相应地编辑您的问题。另请参阅:[如何创建最小,完整和可验证示例](http://*.com/help/mcve) –

+2

*两组代码似乎都是相同的* - Java不是C++。只是因为代码看起来相同,事实并非如此。 – PaulMcKenzie

+0

你不需要用零填充'table'数组的循环。 Java编号数组总是预先填充0. – Boann

在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); 
} 
+0

我如何在这里使java的行为像cpp? @Stefan Haustein –

+0

这是更多的工作:在助手中,将表参数重命名为原始,然后构建一个新表,其中包含从原始复制的所有元素。 –

+0

p.s.你只需要复制,如果你改变表 –