在开始编程之前分析问题。将任务分解为步骤:
- 检查是否
num
对这个问题有效。
num
必须是积极的。
num
一定很奇怪。
- 请注意,您正在检查是否
num
多次有效。num
在开始时检查它,如果无效则退出并显示错误消息。或者,抛出异常,并main
捕获并报告给用户。
- 顺便说一句,
num
这个变量的名字不好。太笼统了。除了循环索引,尽量让你的名字具有描述性。
*
计算除中心输出行之外的所有空格之前必须有多少空格。
- 计算哪条线是中心输出线。
- 对输出的上半部分进行循环。
- 不要
System.out.println()
用于单个字符。
- 该方法每行只应调用一次。
- 打印中心线。
- 为输出的下半部分循环。
现在,您应该尝试停止在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.
}
}
为什么?所以你可以测试它。Java 编程中最宝贵的工具之一是 JUnit 库。您将希望将您的逻辑卸载到微小的方法中,例如:
public boolean validSize(int size) {
// You fill this in.
}
在测试类中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.
}
弄清楚你对方法的要求是什么,并编写测试来检查每一个。对于 0、奇数和偶数,您也会有类似的测试。但是如果你在静态方法中编写所有代码,那就更难了。这样,当您更改程序时,您将知道您的更改是否破坏了您的测试。这就像计算一个不定积分,然后对其进行微分以检查您是否犯了错误。
最后,简化您的工作。我概述你的问题的方式,会有很多代码重复。看看能不能写个方法来替换第4步和第6步的重复代码,调用两次。继续前进;你会看到很多缩短程序的机会。进行测试对此非常宝贵。您还可以使用java.lang.String
类中的标准方法来进一步简化事情。
你看见了吗
System.out.println(i + "*");
没有做你认为的那样?