Java如何以最少的行数打印一条语句1000次

时间:2018-11-01 03:58:26

标签: java

我最近开始使用Java进行编码,因此我对编码的知识非常有限。我想知道如何以最少的行数打印出1000倍的行,例如“鲍勃·吃一个汉堡”。重要说明:我不能使用循环(例如“ for”或“ while”),但必须使用方法。 1000的阶乘:1,2,4,5,8,10,20,25,40,50,100,125,200,250,500,1000 我至少得到了约37行:(我知道这显然还没有达到最低水平)非常感谢。

public class Random{
    public static void main(String [] args){
        twofifty();
        twofifty();
        twofifty();
        twofifty();    
    }
    public static void fives(){
        System.out.println("Bob ate burgers");
        System.out.println("Bob ate burgers");
        System.out.println("Bob ate burgers");
        System.out.println("Bob ate burgers");
        System.out.println("Bob ate burgers");
    }
    public static void fifty()
        fives();
        fives();
        fives();
        fives();
        fives();
        fives();
        fives();
        fives();
        fives();
        fives();
    }
    public static void twofifty(){
        fifty();
        fifty();
        fifty();
        fifty();
        fifty();
    }
}

5 个答案:

答案 0 :(得分:0)

使用递归,即递归调用您的方法并维护一个计数器,该计数器在达到1000时终止递归。

public class Recusrion{
  public static void main(String[] args){
   print(0);
  }
  static void print(int num){
    if (num > 1000)
      return;
    System.out.println(num);
    print(++num);
 }
}



答案 1 :(得分:0)

其他人可以打这个答案。它旨在“使用方法”。不知道foreach是否算作循环。排序取决于一个人的定义。假定方法存在于类RecursePrint中,因此请根据需要进行调整。

public void out(int cntr) {
    System.out.println("Bob's your uncle (" + cntr + ")");
}

此方法使用IntStream和foreach。同样,不确定foreach是否违反循环思路。

public void oneLiner()
{
    IntStream.rangeClosed(1, 1000).forEach(i -> out(i));
}

递归方法(原始)。在这种情况下,该方法将自行调用,直到达到所需的计数为止。可以更改为采用最大值参数。它使用if语句,但没有循环。

public void doit(int cntr)
{
    if (cntr >= 1000) {
        return;
    }

    out(cntr);
    doit(++cntr);
}

public static void main(String[] args)
{
    RecursePrint rp = new RecursePrint();
    rp.doit(0);
    rp.oneLiner();
}

答案 2 :(得分:0)

//assume time > 0 
private static void printLine(int time) {
    if(time != 0) {
        System.out.println("bob doing something");
        printLine(time-1);
    }
}

并像printLine(1000);

那样称呼它

答案 3 :(得分:0)

您可以使用递归!如果您使用参数1000调用print函数,这将打印“鲍勃吃一个汉堡” 1000次。

public class Hello {

public static void print(int count) {
    if (count == 0) {
        return;
    }
    else {
        System.out.println("Bob ate a burger");
        print(count-1);
    }
}

 public static void main(String[] args) 
{
    print(1000);

}

}

由于您是编码新手,所以让我逐步介绍一下此代码。基本上,这是一个递归函数,这意味着该函数会反复调用自身,直到达到基本情况为止。在我们的例子中,基本情况是,如果我们要打印“鲍勃吃一个汉堡”的次数为0,我们将仅从函数返回,因此该函数将不执行任何操作。该函数的返回类型为void,因此不返回任何内容。还需要基本情况​​,因为该功能需要知道何时停止,否则它将永远持续下去。

通过传递count = 1000,打印功能将首先检查count是否为0。不是这样,它将一次打印字符串“ Bob ate a burger”。然后它将再次调用该函数,但是这次计数为999。所以现在由于count不为0,它将再次打印该字符串。

该函数将继续执行此操作,直到count为0,然后我们退出该函数。

答案 4 :(得分:0)

您可以使用Stream

public static void print(int times) {
    IntStream.range(0, times).forEach(i -> System.out.println("Bob ate burgers"));
}

print(1000);    // this is client code

您可以使用递归,但是问题出在大times上,您可以获得SacOverflowException:

public static void print(int times) {
    if (times >= 0) {
        System.out.println("Bob ate burgers");
        print2(--times);
    }
}

print(1000);    // this is client code

下一个变体使用两种不同的方法来模拟调用堆栈而无需递归:

public static void print(int times) {
    step1(times, 0);
}

private static void step1(int times, int i) {
    step2(times, i);
}

private static void step2(int times, int i) {
    if (i < times) {
        System.out.println("Bob ate burgers");
        step1(times, ++i);
    }
}

print(1000);    // this is client code