如何仅使用for循环创建此结构

时间:2013-10-21 15:18:03

标签: java loops

是的,这是作业,但我不知道如何只使用for循环。

enter image description here

我能够使用for循环和if else语句重现结构,但我的导师告诉我不会飞。

public class Problem3 {
public static void main(String[] args) {
    /** Code under here */
        int box = 22;
        for(int i=22; i>0; i--)
        {
         if(i==18)
             System.out.println("\\\\"+"!!!!!!!!!!!!!!!!!!"+"//");
         else if(i == 14) 
             System.out.println("\\\\\\\\"+"!!!!!!!!!!!!!!"+"////");
         else if (i== 10)
             System.out.println("\\\\\\\\\\\\"+"!!!!!!!!!!"+"//////");
         else if (i == 6)
             System.out.println("\\\\\\\\\\\\\\\\"+"!!!!!!"+"////////");
         else if (i == 2)
             System.out.println("\\\\\\\\\\\\\\\\\\\\"+"!!"+"//////////");
         else if(i == 22)
             System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
        }


   System.out.println("");
}    
}

6 个答案:

答案 0 :(得分:4)

一些提示:

  • 线条始终是对称的
  • 行的开头\的数量可以从行号(从0开始)计算
  • 一行中的字符数不变,因此如果您知道有多少!,也可以计算\的数量。

根据这些观察结果,您应该能够生成只有2级嵌套循环的代码(我没有说2个循环,只有2个级别)。

答案 1 :(得分:1)

一行中有22个字符,行n包含2*(n-1) \个字符,2*(n-1) /字符和22 - 4*(n-1) {{ 1}}字符。

您应首先构建要打印的字符串(对于每一行)。这将涉及重复字符(this question提供了一些想法)

答案 2 :(得分:0)

请注意,在每行i中(如果您从0开始编号),开头有2 * i \个字符,末尾有2 * i'/'个字符,行的其余部分已填充用'!'字符。

所以你的代码看起来像是:

for ( int row = 0; row < 6; row++ ) {
  int slashes = 2 * row;
  for ( int slash = 0; slash < slashes; slash++ ) {
    // Print a `\`
  }
  // Work out how many '!'s you need and print them.
  // ... you try this bit
  for ( int slash = 0; slash < slashes; slash++ ) {
    // Print a `/`
  }
}

答案 3 :(得分:0)

请注意,每次在每一侧都有两个斜杠/反斜杠(因此中间有四个! s)。您可以创建一个for循环来增加斜杠数,并计算要打印的!个数,以填充22的长度,然后打印出所有必需的字符当前行。

答案 4 :(得分:0)

这够好吗?我也在学习java。反馈意见。

    public class Problem3 {
public static void main(String[] args) {
    /** Code under here */
    int box = 22;
    int line = 0;
    String char_1 = "w";
    String char_2 = "q";
    String char_3 = "e";
    String string = "";
    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < line * 2; j++) {
            System.out.print(char_1);
        }
        for (int k = box; k > 0; k --) {
            System.out.print(char_2);
        }
        for (int l = 0; l < line * 2; l++){
            System.out.print(char_3);
        }
        System.out.println(string);
        line++;
        box = box - 4;
    }

}

}

答案 5 :(得分:-1)

number_of_lines是预期输出中的行数(在本例中为6)。 number_of_characters是每行应具有的字符数(在这种情况下为22)。

我们知道有一种模式。左侧有\,中间有!,右侧有/。这意味着我们需要一个外循环来遍历这些行,并且三个内循环用于每个部分。

我们如何知道我们需要多少个角色?

第一行有0 \,22 !和0 /

第二行有2 \,18 !和2 /

第三行有4个\,14个!和4个/

第四行有6 \,10 !和6 /

第五行有6 \,10 !和6 /

第六行有8 \,6 !和8 /

第七行有10 \,2 !和10 /

有一种模式。每行的\/计数递增2,!计数递减4.

\的数量等于当前行号的两倍(假设第一行号为0)。与/相同。 !的数量是每行预期的字符总数减去当前行号的四倍(假设第一行号为0)。

public void printCoolStuff(int number_of_lines, int number_of_characters){

    for(int i = 0; i < number_of_lines; i ++){

        String left= "";
        for(int j = 0; j < (2*i); j++){
            left= left+ "\"
        }

        String middle = "";
        for(int j = 0; j < (number_of_characters - 4*i); j++){
            middle = middle + "!"
        }

        String right= "";
        for(int j = 0; j < (2*i); j++){
            right = right + "/"
        }

        System.out.println(left+middle+right);
    }
}