为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MM们 2021-12-22 16:47:57
我最近开始用 java 编码,所以我对编码的了解非常有限。我想知道如何以最少的行数打印诸如“Bob ate a burger”之类的行 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();    }}
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

使用递归,即递归调用您的方法并维护一个计数器,当达到 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);

 }

}


查看完整回答
反对 回复 2021-12-22
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您可以使用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


查看完整回答
反对 回复 2021-12-22
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

其他人可以打高尔夫球这个答案。它旨在“使用方法”。不确定是否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();

}


查看完整回答
反对 回复 2021-12-22
  • 3 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号