对于浮点变量的嵌套if语句,我还有哪些其他选择?

时间:2017-03-09 19:24:20

标签: java variables if-statement infinity

我试图构建一个不依赖于嵌套if语句的float变量的代码,这与您在下面的代码示例中看到的不同。

正如你所看到的那样,球的速度越高,代码就越长。

是否有更短的编写代码的方法,或者我必须使用嵌套的if-else语句作为ball_vector_x的变量,当达到无穷大或仅作为示例达到100?

计数器是从零开始的int变量

if(ball_vector_x == 4 || ball_vector_x == -4) {
    counter = 1;
  } else if(ball_vector_x == 5 || ball_vector_x == -5) {
    counter = 2;
  } else if(ball_vector_x == 6 || ball_vector_x == -6) {
    counter = 3;
  } else if(ball_vector_x == 7 || ball_vector_x == -7) {
    counter = 4;
  } else if(ball_vector_x == 8 || ball_vector_x == -8) {
    counter = 5;
  } else if(ball_vector_x == 9 || ball_vector_x == -9) {
    counter = 6;
  } else if(ball_vector_x == 10 || ball_vector_x == -10) {
    counter = 7;
  } else if(ball_vector_x == 11 || ball_vector_x == -11) {
    counter = 8;
  } else if(ball_vector_x == 12 || ball_vector_x == -12) {
    counter = 9;
  } else if(ball_vector_x == 13 || ball_vector_x == -13) {
    counter = 10;

3 个答案:

答案 0 :(得分:7)

看来你的计数器总是向量 - 3.你不能这样做

  counter = Math.abs(ball_vector_x)-3;

答案 1 :(得分:1)

首先:您可以使用Math.abs()将比较次数减半。

然后你可以使用地图来存储所有这些对。

但是,当然,真正的答案是:您可以使用简单的公式表达这些值之间的关系。这是总是要注意的解决方案。

最后:缺少其他答案来解释 - 避免使用==比较浮点数。改为使用基于epsilon的比较。

答案 2 :(得分:-1)

这将检查ball_vector_x是负数还是正数,然后将计数器设置为等于i的值。

if (ball_vector_x >= 0) {
    for (int i = 0; i < ball_vector_x; i++) {
        if(i == ball_vector_x) {
             counter = i - 3;
        }
    }
    else {
        for(int i = 0; i > ball_vector_x; i--) {
             if (i == ball_vector_x) {
                counter = (-1)*(i + 3); // I might've done the calculation       wrong here
        }
    }
}