作业:无法弄清楚如何编码多个嵌套循环

时间:2014-08-04 18:24:55

标签: java nested-loops

我必须编写代码来打印以下内容:

999999999888888887777777666666555554444333221 999999999888888887777777666666555554444333221 999999999888888887777777666666555554444333221 999999999888888887777777666666555554444333221

我可以达到

999999999888888888777777777666666666555555555444444444333333333222222222111111111 999999999888888888777777777666666666555555555444444444333333333222222222111111111 999999999888888888777777777666666666555555555444444444333333333222222222111111111 999999999888888888777777777666666666555555555444444444333333333222222222111111111

但无法弄清楚如何使每次迭代减少一次

这就是我所拥有的:

public static void main(String[] args)
{       
    for(int i = 0; i < 4; i++)
    { 
        for(int j = 9; j >= 1; j--) 
        {               
            System.out.print(j);

            for(int k = 9; k > 0; k--) 
            {                   
                System.out.print(j);            
            }               
        }
        System.out.println();               
    }                       
}

以下是我对目前的情况的理解:第一个循环(i)控制要进行的行数,而第一个嵌套循环(j)按降序打印数字9到1。第三个嵌套循环(k)决定打印每个数字的次数。我现在需要做的是每次迭代循环时将该数字减少一个。说实话,我有点迷失在这里的代码中。我知道我需要另一个for循环,它会导致我的k循环每次迭代减少一个,但是无法确定将它放在哪里使其成为doo。我试图在k循环中嵌套一个循环,如下所示:

public static void main(String[] args)
{       
    for(int i = 0; i < 4; i++) 
    {                                   
            for(int j = 9; j >= 1; j--)             
            {
                System.out.print(j);

                for(int k = 9; k > 0; k--) 
                {                   
                    System.out.print(j);

                for(int l = 9; l > 0; l--) 
                {                   
                    System.out.print(j);            
                }               
            }               
    }
    System.out.println();               
}                       

但那并没有奏效。我试过把它放在k循环之前,但那也没有用。所以现在我基本上把自己搞糊涂了,完全不知道该做什么。

5 个答案:

答案 0 :(得分:1)

要识别的关键是您要打印出j 'j'个字符。您的k for循环可以从j开始,然后转到0

for(int i = 0; i < 4; i++)
{ 
    for(int j = 9; j >= 1; j--) 
    {               
        System.out.print(j);

        for(int k = j; k > 0; k--) 
        {                   
            System.out.print(j);            
        }               
    }
    System.out.println();               
}                

答案 1 :(得分:0)

提示:在示例1中,您有

public static void main(String[] args)
{       
    for(int i = 0; i < 4; i++)
    { 
        for(int j = 9; j >= 1; j--) 
        {               
            System.out.print(j);

            for(int k = 9; k > 0; k--) 
            {                   
                System.out.print(j);            
            }               
        }
        System.out.println();               
    }                       
}

您打印8次9次,因为k变量从9开始。以j下降时减少的值开始。

答案 2 :(得分:0)

你实际上非常接近,你不应该两次写出来,你应该确保你写出数字本身的次数,而不是每次9次。


一旦你设法解决了这个问题,你应该阅读它,也许它会有所帮助。
注意: 这个答案是 SPOILER

999999999888888887777777666666555554444333221 
999999999888888887777777666666555554444333221 
999999999888888887777777666666555554444333221 
999999999888888887777777666666555554444333221

想一想:
您需要4go from 9 to 1次,并为每个相应的号码写出9...1次的数字。

正如您所说,您需要n的循环,其中n为4:

for(int i = 0; i < 4; i++) 
{
    //...more code here
}

然后,你需要在该循环中从9循环到1:

for(int i = 0; i < 4; i++) 
{
    for(int j = 9; j >= 1; j--)
    {
       //...more code here
    }
}

然后你只需要将数字写出数字本身的次数:

for(int i = 0; i < 4; i++) 
{
    for(int j = 9; j >= 1; j--)
    {
        for(int k = 0; k < j; k++)
        {
             //more code here
        }
    }
}

因此,您只需要添加在打印完1后打印换行的行,以及打印本身,就是这样!不过你也可以这样做。你知道怎么做。

答案 3 :(得分:0)

int k=10;
for(int i=9; i> 0; i--)
{
k--;
j=k;
while (j> 0)
{
System.out.printf("%d", i);
j--;
}
}
System.out.printf("%n");

将其存储在方法中并在需要时调用它,或者在您的情况下调用它4次

答案 4 :(得分:-1)

for(int i = 0; i < 4; i++){
   for(int j = 9; j >= 1; j--)         
    for(int k = j; k > 0; k--) 
        System.out.print(j);            
   System.out.println();     
 }