下面是否有更简洁的方法来执行相同的任务?向下舍入到最接近的 1 或 5mod6

Is there a more succinct way of performing the same task below? Rounding down to nearest 1 or 5mod6

var n = 27;

void main() {

  while  (n>=5)

    if ( (n) % 3==0 && (n) % 2==0 ){
      print(n-1);
      break;
    }
    else if ( (n) % 3==0 && (n) % 2!=0 ){
      print(n-2);
      break;
    }
    else if ((n) % 3!=0 && (n) % 2==0){
      print((n/6).floor()*6 +(1));
      break;
    }
    else { n=n+1;}

}

我一直在寻找一种方法将输入减少到最接近的 1 或 5mod6(对于 n>=5),并在 Dart 中想出了上面的代码(项目处于 flutter 状态)。有没有人有更好的方法来做同样的事情?

结果(向下舍入的输入)将被传递给另一个函数。

对于当前的 n 值 27,控制台将打印 25...尝试其他值 24 映射到 23、23 映射到自身、22、21、20 映射到 19、19 映射到自身、18 映射到 17、17 映射到本身,16,15,14 到 13.....我希望你明白了。

我会通过找到 6 的下一个较小的倍数然后加上 1 或 5 来摆脱循环。代码最终变得更短,我认为它比涉及 [=11 的代码更清楚地表达了你的意图=] 和 % 2.

int lowerMultiple(int n, int multipleOf) =>
    ((n - 1) / multipleOf).floor() * multipleOf;

void main() {
  var n = 27;
  var m = lowerMultiple(n, 6);
  print((n - m) >= 5 ? (m + 5) : (m + 1));
}

以上代码也适用于小于 5 的整数,包括非正整数。