如何使数字保持在 0-359 之间?说如果它超过 1 到 360,它会重新开始到 0
How to make a number stay between 0-359? Say if it goes over by 1 to 360 it restarts to 0
所以我希望数字始终保持在 0 到 359 之间,即使它超过 360、361、362、363...等或低于 -1、-2、-3、-4。 . 等每当我调用下面的任何方法时。
假设它超过 360,我希望它变回 0 等等,如果它低于 -1,我希望它变成 359 等。我有这段代码并且它可以工作,但问题是如果我改变将标题的数量减少或增加到 5 个以上,那么我只需要继续为 else if 语句做准备。什么是更好的编写代码的方法来考虑标题的更高增量或减量?
heading = 3;
public void changeHeadingLeft() {
heading -= 5;
if (heading == -1) {heading = 359;}
else if (heading == -2) {heading = 358;}
else if (heading == -3) {heading = 357;}
else if (heading == -4) {heading = 356;}
else if (heading == -5) {heading = 355;}
heading = 358
public void changeHeadingRight() {
heading += 5;
if (heading == 360) {heading = 0;}
else if (heading == 361) {heading = 1;}
else if (heading == 362) {heading = 2;}
else if (heading == 363) {heading = 3;}
else if (heading == 364) {heading = 4;}
if (heading < 0) { heading += 360;}
适用于航向 -360。同样
if (heading >= 360) { heading -= 360; }
这对模运算符来说是一个完美的工作
heading = heading % 360;
这将 heading
从 0 循环到 359,然后再次回到 0
要处理负面情况,是的,只需添加 360 直到 heading
为正面。
对于小于 0 的值
while(heading < 0){heading+=360;}
对于大于 360 的值
while(heading >= 360){heading-=360;}
使用 while 循环也可以使用小于 -360 的值
您可以使用以下功能:
public static int getHeading(int val)
{
val %= 360;
return (val < 0)? (val+360) :val;
}
看到它工作 here in C++ and here in Java:
class Test
{
public static int getHeading(int val)
{
val %= 360;
return (val < 0)? (val+360) :val;
}
public static void main (String[] args) throws java.lang.Exception
{
int[] vals = {-360, 360, -361, 361, -1, 1};
for(int i = 0; i< vals.length; i++)
{
System.out.println(vals[i] + " = " + getHeading(vals[i]));
}
}
}
输出:
-360 = 0
360 = 0
-361 = 359
361 = 1
-1 = 359
1 = 1
左侧变化:
heading = heading > 0 ? heading : 360 + heading
右转:
heading = heading < 360 ? heading : heading - 360
你可以不使用 if 和循环来做到这一点。
对于增量,使用:
(header + amt) % 360
对于递减,使用:
(360 + header - (amt % 360)) % 360 //(amt % 360) incase amt > 360
示例:
增加 5 到 header:
(0 + 5) % 360 = 5
增加 5 到 header 溢出:
(360 + 5) % 360 = 5
减少 5 到 header:
(360 + 100 - (5 % 360)) % 360 = 95
将 5 减少到 header 并出现下溢:
(360 + 0 - (5 % 360)) % 360 = 355
将 725 减少到 header 下溢且 amt > 360:
(360 + 0 - (725 % 360)) % 360 = 355
您可以将它们添加为方法,这样您就不必记住何时使用哪个。例如:
class CircularNumber{
private static final int BOUND = 360;
private int header;
public void add(int amt){
header = (header + amt) % BOUND;
}
public void deduct(int amt){
header = (360 + header - (amt % BOUND)) % BOUND;
}
}
扣除前用360对要扣除的数额取模,就不用再用循环把360一直加到header直到变成正值。
import java.util.Scanner;
public class myClass {
public static void main (String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number: ");
int n = sc.nextInt();
while(n < 0){n+=360;}
while(n >= 360){n-=360;}
System.out.println(" number: " + n);
}
}
所以我希望数字始终保持在 0 到 359 之间,即使它超过 360、361、362、363...等或低于 -1、-2、-3、-4。 . 等每当我调用下面的任何方法时。 假设它超过 360,我希望它变回 0 等等,如果它低于 -1,我希望它变成 359 等。我有这段代码并且它可以工作,但问题是如果我改变将标题的数量减少或增加到 5 个以上,那么我只需要继续为 else if 语句做准备。什么是更好的编写代码的方法来考虑标题的更高增量或减量?
heading = 3;
public void changeHeadingLeft() {
heading -= 5;
if (heading == -1) {heading = 359;}
else if (heading == -2) {heading = 358;}
else if (heading == -3) {heading = 357;}
else if (heading == -4) {heading = 356;}
else if (heading == -5) {heading = 355;}
heading = 358
public void changeHeadingRight() {
heading += 5;
if (heading == 360) {heading = 0;}
else if (heading == 361) {heading = 1;}
else if (heading == 362) {heading = 2;}
else if (heading == 363) {heading = 3;}
else if (heading == 364) {heading = 4;}
if (heading < 0) { heading += 360;}
适用于航向 -360。同样
if (heading >= 360) { heading -= 360; }
这对模运算符来说是一个完美的工作
heading = heading % 360;
这将 heading
从 0 循环到 359,然后再次回到 0
要处理负面情况,是的,只需添加 360 直到 heading
为正面。
对于小于 0 的值
while(heading < 0){heading+=360;}
对于大于 360 的值
while(heading >= 360){heading-=360;}
使用 while 循环也可以使用小于 -360 的值
您可以使用以下功能:
public static int getHeading(int val)
{
val %= 360;
return (val < 0)? (val+360) :val;
}
看到它工作 here in C++ and here in Java:
class Test
{
public static int getHeading(int val)
{
val %= 360;
return (val < 0)? (val+360) :val;
}
public static void main (String[] args) throws java.lang.Exception
{
int[] vals = {-360, 360, -361, 361, -1, 1};
for(int i = 0; i< vals.length; i++)
{
System.out.println(vals[i] + " = " + getHeading(vals[i]));
}
}
}
输出:
-360 = 0
360 = 0
-361 = 359
361 = 1
-1 = 359
1 = 1
左侧变化:
heading = heading > 0 ? heading : 360 + heading
右转:
heading = heading < 360 ? heading : heading - 360
你可以不使用 if 和循环来做到这一点。
对于增量,使用:
(header + amt) % 360
对于递减,使用:
(360 + header - (amt % 360)) % 360 //(amt % 360) incase amt > 360
示例:
增加 5 到 header:
(0 + 5) % 360 = 5
增加 5 到 header 溢出:
(360 + 5) % 360 = 5
减少 5 到 header:
(360 + 100 - (5 % 360)) % 360 = 95
将 5 减少到 header 并出现下溢:
(360 + 0 - (5 % 360)) % 360 = 355
将 725 减少到 header 下溢且 amt > 360:
(360 + 0 - (725 % 360)) % 360 = 355
您可以将它们添加为方法,这样您就不必记住何时使用哪个。例如:
class CircularNumber{
private static final int BOUND = 360;
private int header;
public void add(int amt){
header = (header + amt) % BOUND;
}
public void deduct(int amt){
header = (360 + header - (amt % BOUND)) % BOUND;
}
}
扣除前用360对要扣除的数额取模,就不用再用循环把360一直加到header直到变成正值。
import java.util.Scanner;
public class myClass {
public static void main (String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number: ");
int n = sc.nextInt();
while(n < 0){n+=360;}
while(n >= 360){n-=360;}
System.out.println(" number: " + n);
}
}