以最基本的方式调用方法三次

时间:2016-05-14 20:14:40

标签: java

我想知道是否有多种基本方法可以多次调用方法。我不被允许使用,if或者其他声明。我想写一个名为test 1和test 2的方法,它调用增加速度并降低速度3倍。如果有人能提出我的建议,我将不胜感激。

要求

increaseSpeed。 increaseSpeed方法应该加速10 每次调用时都有字段。

reduceSpeed。 reduceSpeed方法应从速度中减去10 每次调用时都有字段。

编写一个名为test1的方法,调用IncreaseSpeed三次。

编写一个名为test2的方法,调用reduceSpeed三次。

程序:

 public void increaseSpeed()
   {
      speed += 10;
   }

   public void reduceSpeed()
   {
      speed -= 5;
   }
   public void test1(){

   }

   public void test2(){

   }

}

6 个答案:

答案 0 :(得分:4)

您可以使用for循环模拟while循环:

public void test1() {
    int i = 0;
    while (i < 3) {
        increaseSpeed();
        ++i;
    }
}

或者,如果您不允许使用循环,则可以只调用increaseSpeed三次:

public void test1() {
    increaseSpeed();
    increaseSpeed();
    increaseSpeed();
}

答案 1 :(得分:2)

我们也可以获得更多创意(a.k.a.毫无意义):

第一个例子需要Java 8,但它是一个美化的FOR循环。如果您厌恶单词'for',则可以将'​​forEach'替换为具有忽略输出的map()或filter()或其他Java流处理项之一。

private static void test1() {
    IntStream.range(0, 3).forEach(
            i -> increaseSpeed()
    );
}

第二个例子使用了一个开关+递归,因为你也没有提到关于'switch'语句的任何内容。

private static final int INITIAL_COUNT = 2; // 3 - 1
private static int numTimes = INITIAL_COUNT;

private static void test2() {
    switch(numTimes) {
        case 0:
            numTimes = INITIAL_COUNT;
            break;
        default:
            numTimes--;
            test2();
            break;
    }
    reduceSpeed();
}

请注意,如果您尝试将其中任何一个提交给代码审核,那么除非项目由不关心代码质量的小丑运行,否则您将被拒绝:)

答案 2 :(得分:1)

public void test1(){
    increaseSpeed();
    increaseSpeed();
    increaseSpeed();
}

public void test2(){
    decreaseSpeed();
    decreaseSpeed();
    decreaseSpeed();
}

对于更一般的“解决方案”,黑客可以看看这些:C: Looping without using looping statements or recursionhttps://codegolf.stackexchange.com/questions/33196/loop-without-looping

答案 3 :(得分:1)

你没有提到while loop被禁止,我认为可以使用它:

int i = 0;
while(i<3){
    increaseSpeed();
    i++;
}

或者,您可以使用do-while loop来实现您的要求或调用该方法3次。

答案 4 :(得分:0)

使用给定的方法,最有效和最简单的方法是连续3次调用它:

public void test1() {
   increaseSpeed();
   increaseSpeed();
   increaseSpeed();
}


public void test2() {
   decreaseSpeed();
   decreaseSpeed();
   decreaseSpeed();
}

更灵活的方法是使用递归调用,如下所述:

public void test1() {
   increaseSpeed(3);
}

public void test2() {
   decreaseSpeed(3);
}

private void increaseSpeed(int numTimes) {
   if (numTimes == 0) {
       return;
   }

   increaseSpeed();
   increaseSpeed(numTimes-1);
}

private void decreaseSpeed(int numTimes) {
    if (numTimes == 0) {
        return;
    }

    decreaseSpeed();
    decreaseSpeed(numTimes-1);
}

稍微超出问题的范围,如果这些测试模拟了一个真实的用例,那么查看方法increaseSpeed()和decreaseSpeed()以防止这些多次调用可能是个好主意。

答案 5 :(得分:-1)

你的test1方法应该是递归的,它应该采用一个Integer作为参数,这个参数将是你想要的调用次数 所以基本上你应该有这样的东西:

public void test1(int nbcalls) {
  if (nbcalls-- > 0) {
     increaseSpeed();
     test1(nbcalls);
  }
}

你称之为这样的方法:

test1(3);

你应该对test2(...)方法做同样的事情