Java中的递归处理钻石

时间:2014-07-16 23:00:13

标签: java recursion

我提出的代码显示了计算机内某个文件的菱形图案。我遇到的问题是,代码读取的内容不同,第一行的每个*都关闭。我真的不确定如何解决这个问题,因为第一颗钻石显示完美。我也在使用if语句时遇到问题。如果数字小于0或大于25,则不应打印出来,但即使使用if语句,我仍然打印出钻石。有谁可以帮我解决这两个问题?

CODE

import java.util.Scanner;
import java.io.*;

public class Pract2 {
  public static void main(String[] args) throws Exception {
    File file = new File("prog3.txt");
    Scanner sc = new Scanner(file);
    while (sc.hasNextLine()) {
    int num = sc.nextInt();
    new Pract2().results(num);
    if (num < 0)
      System.out.println("Cannot Print");
    if (num > 25)
      System.out.println("Cannot Print");
    } 
  }

  public String method1 (int num) {
    if (num > 0){
      return "* " + method1(num - 1);
    }
    else {
      return " ";
    }
  }

  public String method2 (int num) {
    if (num > 0) {
      return " * " + method1(num -1);
    }
    else {
      return " ";
    }
  }
  public String space (int num) {
    if (num > 0) {
      return " " + space(num - 1);
    }
    else {
      return " ";
    }
  }
  public void results (int num) {
    for (int i = 1; i < num; i++) {
      System.out.print(space(num - i));
      System.out.println(method1(i));
    }
    for (int i = 0; i < num; i++) {
      System.out.println(method2(num-i));
      System.out.print(space(i));
    }
  }
}

输出:

    *  
   * *  
  * * *  
 * * * *  
  * * *  
   * *  
    *  
       *  
  * *  
 * * *  
  * *  
   *  
                  *  
              * *  
             * * *  
            * * * *  
           * * * * *  
          * * * * * *  
         * * * * * * *  
        * * * * * * * *  
       * * * * * * * * *  
      * * * * * * * * * *  
     * * * * * * * * * * *  
    * * * * * * * * * * * *  
   * * * * * * * * * * * * *  
  * * * * * * * * * * * * * *  
 * * * * * * * * * * * * * * *  
  * * * * * * * * * * * * * *  
   * * * * * * * * * * * * *  
    * * * * * * * * * * * *  
     * * * * * * * * * * *  
      * * * * * * * * * *  
       * * * * * * * * *  
        * * * * * * * *  
         * * * * * * *  
          * * * * * *  
           * * * * *  
            * * * *  
             * * *  
              * *  
               *  
                                         *  
                         * *  
                        * * *  
                       * * * *  
                      * * * * *  
                     * * * * * *  
                    * * * * * * *  
                   * * * * * * * *  
                  * * * * * * * * *  
                 * * * * * * * * * *  
                * * * * * * * * * * *  
               * * * * * * * * * * * *  
              * * * * * * * * * * * * *  
             * * * * * * * * * * * * * *  
            * * * * * * * * * * * * * * *  
           * * * * * * * * * * * * * * * *  
          * * * * * * * * * * * * * * * * *  
         * * * * * * * * * * * * * * * * * *  
        * * * * * * * * * * * * * * * * * * *  
       * * * * * * * * * * * * * * * * * * * *  
      * * * * * * * * * * * * * * * * * * * * *  
     * * * * * * * * * * * * * * * * * * * * * *  
    * * * * * * * * * * * * * * * * * * * * * * *  
   * * * * * * * * * * * * * * * * * * * * * * * *  
  * * * * * * * * * * * * * * * * * * * * * * * * *  
 * * * * * * * * * * * * * * * * * * * * * * * * * *  
  * * * * * * * * * * * * * * * * * * * * * * * * *  
   * * * * * * * * * * * * * * * * * * * * * * * *  
    * * * * * * * * * * * * * * * * * * * * * * *  
     * * * * * * * * * * * * * * * * * * * * * *  
      * * * * * * * * * * * * * * * * * * * * *  
       * * * * * * * * * * * * * * * * * * * *  
        * * * * * * * * * * * * * * * * * * *  
         * * * * * * * * * * * * * * * * * *  
          * * * * * * * * * * * * * * * * *  
           * * * * * * * * * * * * * * * *  
            * * * * * * * * * * * * * * *  
             * * * * * * * * * * * * * *  
              * * * * * * * * * * * * *  
               * * * * * * * * * * * *  
                * * * * * * * * * * *  
                 * * * * * * * * * *  
                  * * * * * * * * *  
                   * * * * * * * *  
                    * * * * * * *  
                     * * * * * *  
                      * * * * *  
                       * * * *  
                        * * *  
                         * *  
                          *  
                          Cannot Print
  

期望输出:

    *  
   * *  
  * * *  
 * * * *  
  * * *  
   * *  
    *

   *  
  * *  
 * * *  
  * *  
   *  
               *  
              * *  
             * * *  
            * * * *  
           * * * * *  
          * * * * * *  
         * * * * * * *  
        * * * * * * * *  
       * * * * * * * * *  
      * * * * * * * * * *  
     * * * * * * * * * * *  
    * * * * * * * * * * * *  
   * * * * * * * * * * * * *  
  * * * * * * * * * * * * * *  
 * * * * * * * * * * * * * * *  
  * * * * * * * * * * * * * *  
   * * * * * * * * * * * * *  
    * * * * * * * * * * * *  
     * * * * * * * * * * *  
      * * * * * * * * * *  
       * * * * * * * * *  
        * * * * * * * *  
         * * * * * * *  
          * * * * * *  
           * * * * *  
            * * * *  
             * * *  
              * *  
               *  
                          *  
                         * *  
                        * * *  
                       * * * *  
                      * * * * *  
                     * * * * * *  
                    * * * * * * *  
                   * * * * * * * *  
                  * * * * * * * * *  
                 * * * * * * * * * *  
                * * * * * * * * * * *  
               * * * * * * * * * * * *  
              * * * * * * * * * * * * *  
             * * * * * * * * * * * * * *  
            * * * * * * * * * * * * * * *  
           * * * * * * * * * * * * * * * *  
          * * * * * * * * * * * * * * * * *  
         * * * * * * * * * * * * * * * * * *  
        * * * * * * * * * * * * * * * * * * *  
       * * * * * * * * * * * * * * * * * * * *  
      * * * * * * * * * * * * * * * * * * * * *  
     * * * * * * * * * * * * * * * * * * * * * *  
    * * * * * * * * * * * * * * * * * * * * * * *  
   * * * * * * * * * * * * * * * * * * * * * * * *  
  * * * * * * * * * * * * * * * * * * * * * * * * *  
 * * * * * * * * * * * * * * * * * * * * * * * * * *  
  * * * * * * * * * * * * * * * * * * * * * * * * *  
   * * * * * * * * * * * * * * * * * * * * * * * *  
    * * * * * * * * * * * * * * * * * * * * * * *  
     * * * * * * * * * * * * * * * * * * * * * *  
      * * * * * * * * * * * * * * * * * * * * *  
       * * * * * * * * * * * * * * * * * * * *  
        * * * * * * * * * * * * * * * * * * *  
         * * * * * * * * * * * * * * * * * *  
          * * * * * * * * * * * * * * * * *  
           * * * * * * * * * * * * * * * *  
            * * * * * * * * * * * * * * *  
             * * * * * * * * * * * * * *  
              * * * * * * * * * * * * *  
               * * * * * * * * * * * *  
                * * * * * * * * * * *  
                 * * * * * * * * * *  
                  * * * * * * * * *  
                   * * * * * * * *  
                    * * * * * * *  
                     * * * * * *  
                      * * * * *  
                       * * * *  
                        * * *  
                         * *  
                          *  
  

2 个答案:

答案 0 :(得分:1)

问题来自于当前恒星线上*的下一行的空格。

如果您用不同的字符替换空格,请说'_'并打印1星,您会看到

___*__
__*_*__
_*_*_*__
__*_*__
___*__
___ <- look here

最后,即将到来的*的下一行会打印一些空格。快速修复是检查是否有下一个要打印的星星

public void results(int num) {
    for (int i = 1; i < num; i++) {
        System.out.print(space(num - i));
        System.out.println(method1(i));
    }
    for (int i = 0; i < num; i++) {
        System.out.println(method2(num - i));
        if(i+1 < num) // make sure we have another star
            System.out.print(space(i));
    }
}

答案 1 :(得分:0)

正如大卫所说,你应该用以下代码替换这段代码:

while (sc.hasNextLine()) {
    int num = sc.nextInt();

    if (num < 0 || num > 25)

       System.out.println("Can not print")
       break;

    }else{

       new Pract2().results(num);


     } 
相关问题