我最近开始使用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();
}
}
答案 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