将C代码转换为Java代码

时间:2017-03-29 20:42:35

标签: java

我提供了一些转换为java代码的c代码。实现三种不同的生成N的方法! Java中N个元素的排列。我提供的代码是我转换后的c代码到java,我成功了直到这行代码,swap((n& 0x01)?1:i,n); ...在permute3方法中,我不完全确定它正在做什么或意味着什么,我需要知道如何在java中编写等价物。

public class Permute {

    public static final long MILLION = 1000000L;

    static int N;
    static char p[];
    static int[][] table =   { {0}, {0, 1}, {0, 1, 1}, {0, 1, 2, 3},
                  {0, 3, 1, 3, 1},
                  {0, 3, 4, 3, 2, 3},
                  {0, 5, 3, 1, 5, 3, 1},
                  {0, 5, 2, 7, 2, 1, 2, 3},
                  {0, 7, 1, 5, 5, 3, 3, 7, 1},
                  {0, 7, 8, 1, 6, 5, 4, 9, 2, 3},
                  {0, 9, 7, 5, 3, 1, 9, 7, 5, 3, 1},
                  {0, 9, 6, 3, 10, 9, 4, 3, 8, 9, 2, 3}};




    public static void init()
    {
    p = new char[27];   
    p[0] = '*';

    for(int i = 0; i < 26; i++)
    {
        p[i + 1] = (char) ('A'+i);
    }


    }

    public static void swap(int i, int j)
    {
        char c;

        c = p[i];
        p[i] = p[j];
        p[j] = c;
    }

    static void printIt()
    {
        long count = 0;

        //to compare performance, comment out from here


         for (int i = 1; i <= N; i++)
         System.out.printf("%c", p[i]);
         System.out.printf("\n");
         //to here

        count++;

    }

    static void permute1(int n)
    {
        if(n == 1)
        {
            printIt();
        }

        for(int i = 1; i <= n; i++)
        {
            swap(i, n);
            permute1(n-1);
            swap(i, n);
        }
    }

    static void permute2(int n)
    {
        if(n == 1)
        {
            printIt();
            return;
        }
        for(int i = 1; i <= n; i++)
        {
            permute2(n-1);
            swap(table[n][i], n);

        }
    }

    static void permute3(int n)
    {
        if(n == 1)
        {
            printIt();
            return;
        }
        for(int i = 1; i <= n; i++)
        {
            permute3(n - 1);
            swap((n & 0x01) ? 1 : i, n);
        }
    }

1 个答案:

答案 0 :(得分:0)

二元运算符&amp; 以两种语言执行其操作数的按位乘法(AND)。

此表达式还使用三元运算符a ? b : c;。首先,它检查a的值,如果为真,则返回b,否则返回c。

在C中,认为!= 0的整数值为真。 Java不会将整数值转换为布尔值。

因此,要使表达式起作用,您需要按如下方式编写它:

swap((n & 0x01) != 0) ? 1 : i, n);