简单的汇编代码转换为Java

时间:2014-08-01 01:34:33

标签: java

我想将以下代码转换为Java代码。我认为这是汇编代码,但不确定。我真正得不到的部分是y -= m < 3;

int dow(int y, int m, int d)
{
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= m < 3;
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

5 个答案:

答案 0 :(得分:3)

布尔值m < 3将评估为01。然后操作y -=更有意义。

在java中,它看起来更像是:

y -= (m<3 ? 1 : 0)

答案 1 :(得分:0)

那个C代码,我相信这个

static final int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4,
  6, 2, 4 };

static int dow(int y, int m, int d) {
  if (m < 3) {
    y--;
  }
  return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7;
}

是等价的。因为如果y -= m < 3; y-=1; m<3y-=0;将评估为if。相反,您可以使用简单的t[]。最后,{{1}}在Java中的方法中不能是静态的。

答案 2 :(得分:0)

您在Java中的代码将是

public static void main(String[] args){
    int calculated_value = dow(2014, 7, 31);
}   

public static int dow(int y, int m, int d){
    int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= (m < 3 ? 1 : 0);
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

答案 3 :(得分:0)

我看到你已经在其他答案中对代码进行了一些很好的文字翻译,但你真正想要写的是以下内容,它清晰,可读,并且依赖于受信任的库:

public static int dow(int y, int m, int d)
{
    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, y);
    c.set(Calendar.MONTH, m - 1);
    c.set(Calendar.DAY_OF_MONTH, d);

    return (c.get(Calendar.DAY_OF_WEEK) - 1);
}

最后的- 1只是将Java使用的数字星期几表示(其中Sunday = 1和Saturday = 7)映射到与原始代码中相同的映射。与m - 1类似。

答案 4 :(得分:0)

这是我对Java的转换:

package datecalculator;

import javax.swing.*;

public class DateCalculator {

    public static int calculateDay(int y, int m, int d){

        //Tomohiko Sakamoto's method
        int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
        y -= (m < 3 ? 1 : 0);
        return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
    }

    public static void main(String[] args){

        //Receiving input
        int y = Integer.parseInt(JOptionPane.showInputDialog("Enter the year"));
        int m = Integer.parseInt(JOptionPane.showInputDialog("Enter the month"));
        int d = Integer.parseInt(JOptionPane.showInputDialog("Enter the day"));

        //Calling Tomohiko Sakamoto's method
        int answer = calculateDay(y, m, d);

        //Output
        if (answer == 0){JOptionPane.showMessageDialog(null, "Sunday");}
        if (answer == 1){JOptionPane.showMessageDialog(null, "Monday");}
        if (answer == 2){JOptionPane.showMessageDialog(null, "Tuesday");}
        if (answer == 3){JOptionPane.showMessageDialog(null, "Wednesday");}
        if (answer == 4){JOptionPane.showMessageDialog(null, "Thursday");}
        if (answer == 5){JOptionPane.showMessageDialog(null, "Friday");}
        if (answer == 6){JOptionPane.showMessageDialog(null, "Saturday");}
    }   

}