如何在Java中的命令行中打印十字形?

Jer*_*one 0 java

我必须使用方法创建十字形状,参数是十字形的"大小".输入一个数字,如果数字是奇数,则绘制十字形,所以如果我输入一个5,输出看起来就像我添加到底部的截图

因为我上周才启动方法,所以中心线真的让我失望,但到目前为止,我有:

import java.util.Scanner;

public class Cross {

    public static void main(String[] arg) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Please type a number: ");
        int num = keyboard.nextInt(); 
        drawCross(num);
    }

    public static void drawCross(int num){
        for (int = 1; i <= num; i++) {
            if ((num % 2) != 0) {
                System.out.println(i + "*");
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我知道这可能已经过时了,但我是方法的新手.

截图:

Eri*_*low 5

在开始编程之前分析问题.将任务分解为几个步骤:

  1. 检查是否num对此问题有效.
    • num 必须是积极的.
    • num 一定是奇怪的.
    • 请注意,您正在检查是否num有效多次.在开头检查它,如果num无效则退出并显示错误消息.或者,抛出异常,并main抓住它并向用户报告.
      • 在你知道如何使用异常之后,就是这样.
    • 顺便说一下,num变量是一个坏名字.这太普通了.除了循环索引,请尝试将您的名称描述为.
  2. 计算*除了中心输出线之外的所有空格必须在其前面.
  3. 计算哪条线是中心输出线.
  4. 为输出的上半部分做一个循环.
    • 不要System.out.println()用于个别角色.
    • 该方法每行只应调用一次.
  5. 打印中心线.
  6. 为输出的下半部分做一个循环.

现在,您应该尝试停止执行所有内容main和其他静态方法. Cross是一个类,你应该创建一个类的实例并让它完成工作.

public class Cross {
    public static void main(String[] arg) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Please type a number: ");
        int num = keyboard.nextInt();
        Cross cross = new Cross();
        cross.drawCross(num);
    }

    private void drawCross(int size) {
        // Your turn.
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么?所以你可以测试一下.JUnit库是Java编程中最宝贵的工具之一.您需要将逻辑卸载到以下方法中:

public boolean validSize(int size) {
    // You fill this in.
}
Run Code Online (Sandbox Code Playgroud)

在测试类中CrossTest,您将编写如下代码:

@Test
public void negativeSizesAreIllegal() {
    Cross cross = new Cross();
    // Test whether cross.validSize(-13) returns false.
    // Look at the JUnit web site or any book describing the tool.
}
Run Code Online (Sandbox Code Playgroud)

弄清楚你对方法的要求是什么,并编写测试来检查每个方法.对于0,奇数整数甚至整数,你也会有类似的测试.但是如果你用静态方法完成所有代码,那就更难了.这样,当您更改程序时,您将知道您的更改是否已破坏您的测试.这就像计算一个不定积分,并区分它来检查你是否犯了错误.

最后,简化您的工作.我概述你的问题的方式,将有很多代码重复.看看你是否可以编写一个方法来替换步骤4和6中的重复代码,并调用它两次.坚持下去; 你会看到很多机会缩短你的计划.进行测试对此非常宝贵.您还可以在java.lang.String类中使用标准方法来进一步简化操作.

你看到了吗

System.out.println(i + "*");
Run Code Online (Sandbox Code Playgroud)

没做你想的那样吗?