Answer:
Here is the JAVA program:
import java.util.Scanner; // to get input from user
public class DrawHalfArrow{ // start of the class half arrow
public static void main(String[] args) { // starts of main() function body
Scanner scnr = new Scanner(System.in); //reads input
int arrowBaseHeight = 0; // stores the height of arrow base
int arrowBaseWidth = 0; // holds width of arrow base
int arrowHeadWidth = 0; // contains the width of arrow head
// prompts the user to enter arrow base height, width and arrow head width
System.out.println("Enter arrow base height: ");
arrowBaseHeight = scnr.nextInt(); // scans and reads the input as int
System.out.println("Enter arrow base width: ");
arrowBaseWidth = scnr.nextInt();
/* while loop to continue asking user for an arrow head width until the value entered is greater than the value of arrow base width */
while (arrowHeadWidth <= arrowBaseWidth) {
System.out.println("Enter arrow head width: ");
arrowHeadWidth = scnr.nextInt(); }
//start of the nested loop
//outer loop iterates a number of times equal to the height of the arrow base
for (int i = 0; i < arrowBaseHeight; i++) {
//inner loop prints the stars asterisks
for (int j = 0; j <arrowBaseWidth; j++) {
System.out.print("*"); } //displays stars
System.out.println(); }
//temporary variable to hold arrowhead width value
int k = arrowHeadWidth;
//outer loop to iterate no of times equal to the height of the arrow head
for (int i = 1; i <= arrowHeadWidth; i++)
{ for(int j = k; j > 0; j--) {//inner loop to print stars
System.out.print("*"); } //displays stars
k = k - 1;
System.out.println(); } } } // continues to add more asterisks for new line
Explanation:
The program asks to enter the height of the arrow base, width of the arrow base and the width of arrow head. When asking to enter the width of the arrow head, a condition is checked that the arrow head width arrowHeadWidth should be less than or equal to width of arrow base arrowBaseWidth. The while loop keeps iterating until the user enters the arrow head width larger than the value of arrow base width.
The loop is used to output an arrow base of height arrowBaseHeight. So point (1) is satisfied.
The nested loop is being used which as a whole outputs an arrow base of width arrowBaseWidth. The inner loop draws the stars and forms the base width of the arrow, and the outer loop iterates a number of times equal to the height of the arrow. So (2) is satisfied.
A temporary variable k is used to hold the original value of arrowHeadWidth so that it keeps safe when modification is done.
The last nested loop is used to output an arrow head of width arrowHeadWidth. The inner loop forms the arrow head and prints the stars needed to form an arrow head. So (3) is satisfied.
The value of temporary variable k is decreased by 1 so the next time it enters the nested for loop it will be one asterisk lesser.
The screenshot of output is attached.