整数算术Java

时间:2016-09-13 12:33:02

标签: java

enter image description here

在为期30天的月计划员中,阅读日期是这样的:1,2,3,...28,29,30,1,2,3.. 实现一个类ModMonth来执行以下操作:

Q1.succ(dy),返回第二天的值。

succ(29) => 30,
succ(30)=> 1

Q2。 pred(dy),返回前一天的值

pred(2) => 1,
pred(1) ==> 30.

问题是,如何通过简单地修改一些常量而不是枚举一万亿个值来对它进行简短的解决方案,这个解决方案也适用于万亿天的月份?例如:

public int succ(int dy) {
    int[] nextDay = {
        2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
        19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1
    };
    return nextDay [dy - 1];
}

这两种方法都是不可接受的......我只能这样想。 同样适用于public int succ int dy .. dy == 1

有没有其他方法可以制作一个简短的方法?我正在使用Drjava应用程序btw。

2 个答案:

答案 0 :(得分:0)

试试这个:

public class NewClass {
   static int monthLength;
   public static int succ(int n) {
       if(n+1 > monthLength)
       return n+1-monthLength;
       else
       return n+1;    
   }
   public static int pred(int n) {
       if(n-1 <= 0)
       return n-1+monthLength;
       else
       return n-1;  
   }
   public static void main(String[] args) {
       monthLength = 30;
       System.out.println(succ(29));
       System.out.println(succ(30));
       System.out.println(pred(2));
       System.out.println(pred(1));
   }
}

答案 1 :(得分:0)

请不要在这里提交作业问题。

答案:

succ(x): return x % 30 + 1
pred(x):  return x - 1 + (30 ? x == 1 : 0)