最受欢迎的Java编程语言练习之一是用星号画一个半箭头。
你需要要求用户输入箭头的底高、底宽和头宽。
例如,假设用户向你的Java程序输入以下数据:
int arrowBaseHeight = 4;
int arrowBaseWidth = 3;
int arrowHeadWidth = 5;
程序的输出应该如下:
*** // base width is 3
***
***
*** // 4 rows of arrow base height
***** // Head width starting at 5
****
***
**
*
本教程将帮助你学习如何解决上述问答。
首先,你需要使用一个循环,以便根据变量的值来打印星号* 。
创建一个名为DrawHalfArrow 的Java类,并在该类的main() 方法中定义以下变量:
class DrawHalfArrow {
public static void main(String[] args) {
int arrowBaseHeight = 4;
int arrowBaseWidth = 3;
int arrowHeadWidth = 5;
}
}
接下来,创建一个循环,打印出箭头基数。因为你知道你需要重复循环任务的次数,你可以使用for 循环。
下面是将打印半边箭的底座的代码:
for (int i = 0; i < arrowBaseHeight; i++) {
for (int j = 0; j < arrowBaseWidth; j++) {
System.out.print("*");
}
System.out.println();
}
第一个for 循环将打印箭头的基底高度。
对于每一行的arrowBaseHeight ,第二个for 循环将打印出与arrowBaseWidth 值相同次数的星号。
运行该程序将得到以下结果:
***
***
***
***
正如你所看到的,你可以得到箭基宽度的3 列和箭基高度的4 行。
接下来,你需要打印箭头的星号。
你可以通过使用相同的双for 循环模式来完成,就像对底座一样:
for (int k = arrowHeadWidth; k > 0; k--) {
for (int l = 0; l < k; l++){
System.out.print("*");
}
System.out.println();
}
首先,你需要一个for 循环来打印头部的行数,这将与arrowHeadWidth 相同。
之后,你需要第二个for 循环,以打印星号。对于每一行,星号将被递减一个,直到只有一个星号可以打印。
当你运行该程序时,你将得到完整的输出:
***
***
***
***
*****
****
***
**
*
现在你已经有了正确的输出,你需要使程序接受用户对箭头大小的输入。
要做到这一点,你需要使用JavaScanner 包,它给你一个接受用户输入的命令行工具。
看一下下面的代码:
import java.util.Scanner;
class DrawHalfArrow {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int arrowBaseHeight;
int arrowBaseWidth;
int arrowHeadWidth;
System.out.println("Enter arrow base height: ");
arrowBaseHeight = scanner.nextInt();
System.out.println("Enter arrow base width: ");
arrowBaseWidth = scanner.nextInt();
System.out.println("Enter arrow head width: ");
arrowHeadWidth = scanner.nextInt();
}
}
你没有用任意的数字来初始化变量,而是让用户用scanner 对象来输入变量值。
nextInt() 方法被用来让scanner 知道你在期待一个Int 的值。如果该值不是Int ,那么Java将抛出一个错误并停止程序。
最后,你需要确保arrowHeadWidth 的值大于arrowBaseWidth 的值。
这是因为如果你输入的arrowHeadWidth 值小于或等于arrowBaseWidth 值,那么箭头头就会看起来不对:
*** // arrowBaseWidth = 3
***
***
*** // arrowBaseHeight = 4
** // arrowHeadWidth = 2
*
上面的输出看起来不像是一个箭头,对吗?
为了防止上面的输出,你需要添加一个while 循环,只要arrowHeadWidth 小于或等于arrowBaseWidth 的值,就会运行:
while (arrowHeadWidth <= arrowBaseWidth) {
System.out.println("Arrow head width must be greater than base width!");
System.out.println("Enter arrow head width: ");
arrowHeadWidth = scanner.nextInt();
}
下面是该程序的完整代码:
import java.util.Scanner;
class DrawHalfArrow {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int arrowBaseHeight;
int arrowBaseWidth;
int arrowHeadWidth;
System.out.println("Enter arrow base height: ");
arrowBaseHeight = scanner.nextInt();
System.out.println("Enter arrow base width: ");
arrowBaseWidth = scanner.nextInt();
System.out.println("Enter arrow head width: ");
arrowHeadWidth = scanner.nextInt();
while (arrowHeadWidth <= arrowBaseWidth) {
System.out.println("Arrow head width must be greater than base width!");
System.out.println("Enter arrow head width: ");
arrowHeadWidth = scanner.nextInt();
}
for (int i = 0; i < arrowBaseHeight; i++) {
for (int j = 0; j < arrowBaseWidth; j++) {
System.out.print("*");
}
System.out.println();
}
for (int k = arrowHeadWidth; k > 0; k--) {
for (int l = 0; l < k; l++){
System.out.print("*");
}
System.out.println();
}
}
}
当你运行该程序时,你会有如下的输出:
Enter arrow base height:
5
Enter arrow base width:
4
Enter arrow head width:
4
Arrow head width must be greater than the arrow base width!
Enter arrow head width:
5
****
****
****
****
****
*****
****
***
**
*
就这样,你已经解决了写一个画半边箭的程序的Java练习。干得好!
欢迎在你的项目中使用本教程中的代码。 😉