86.9k views
2 votes
This program outputs a downwards facing arrow composed of a rectangle and a right triangle. The arrow dimensions are defined by user specified arrow base height, arrow base width, and arrow head width.

(1) Modify the given program to use a loop to output an arrow base of height arrowBaseHeight. (1 pt)
(2) Modify the given program to use a loop to output an arrow base of width arrowBaseWidth. Use a nested loop in which the inner loop draws the *’s, and the outer loop iterates a number of times equal to the height of the arrow base. (1 pt)
(3) Modify the given program to use a loop to output an arrow head of width arrowHeadWidth. Use a nested loop in which the inner loop draws the *’s, and the outer loop iterates a number of times equal to the height of the arrow head. (2 pts)
(4) Modify the given program to only accept an arrow head width that is larger than the arrow base width. Use a loop to continue prompting the user for an arrow head width until the value is larger than the arrow base width. (1 pt)
while (arrowHeadWidth <= arrowBaseWidth) {
// Prompt user for a valid arrow head value
}
Example output for arrowBaseHeight = 5, arrowBaseWidth = 2, and arrowHeadWidth = 4:
Enter arrow base height:
5
Enter arrow base width:
2
Enter arrow head width:
4

**
**
**
**
**
****
***
**
*
This is what I have:
import java.util.Scanner;
public class DrawHalfArrow
{
public static void main(String[] args)
{
Scanner scnr = new Scanner(System.in);
int arrowBaseHeight = 0;
int arrowBaseWidth = 0;
int arrowHeadWidth = 0;
System.out.println("Enter arrow base height:");
arrowBaseHeight = scnr.nextInt();
System.out.println("Enter arrow base width:");
arrowBaseWidth = scnr.nextInt();
while (arrowHeadWidth >= arrowBaseWidth)
{
System.out.println("Enter arrow head width:");
arrowHeadWidth = scnr.nextInt();
}
// Draw arrow base (height = 3, width = 2)
for(int i=0; i < arrowBaseHeight; ++i)
{
for(int j=0; j < arrowBaseWidth; ++j)
{
System.out.print("*");
}
System.out.println();
}
// Draw arrow head (width = 4)
for(int i=0; i < arrowHeadWidth; ++i)
{
for(int j=0; j < arrowHeadWidth-i; ++j)
{
System.out.print("*");
}
System.out.println();
}
return;
}
}

User David Wu
by
6.1k points

1 Answer

3 votes

Answer:

The modified program in Java is as follows:

import java.util.*;

public class Main{

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

int arrowHeadWidth, arrowBaseWidth, arrowBaseHeight;

System.out.print("Head Width: "); arrowHeadWidth = input.nextInt();

System.out.print("Base Width: "); arrowBaseWidth = input.nextInt();

System.out.print("Base Height: "); arrowBaseHeight = input.nextInt();

while (arrowHeadWidth <= arrowBaseWidth) {

System.out.print("Head Width: "); arrowHeadWidth = input.nextInt();

System.out.print("Base Width: "); arrowBaseWidth = input.nextInt(); }

for(int i = 0; i<arrowBaseHeight; i++){

for(int j = 0; j<arrowBaseWidth;j++){

System.out.print("*"); }

System.out.println(); }

for(int i = arrowHeadWidth; i>0;i--){

for(int j = 0; j<i;j++){

System.out.print("*"); }

System.out.println(); }

}

}

Step-by-step explanation:

This declares the arrow dimensions

int arrowHeadWidth, arrowBaseWidth, arrowBaseHeight;

This get input for the head width

System.out.print("Head Width: "); arrowHeadWidth = input.nextInt();

This get input for the base width

System.out.print("Base Width: "); arrowBaseWidth = input.nextInt();

This get input for the base height

System.out.print("Base Height: "); arrowBaseHeight = input.nextInt();

This loop is repeated until the head width is greater than the base width

while (arrowHeadWidth <= arrowBaseWidth) {

System.out.print("Head Width: "); arrowHeadWidth = input.nextInt();

System.out.print("Base Width: "); arrowBaseWidth = input.nextInt(); }

This iterates through the base height

for(int i = 0; i<arrowBaseHeight; i++){

This iterates through the base width

for(int j = 0; j<arrowBaseWidth;j++){

This fills the base

System.out.print("*"); }

This prints a new line

System.out.println(); }

These iterate through the arrow head

for(int i = arrowHeadWidth; i>0;i--){

for(int j = 0; j<i;j++){

This fills the arrow head

System.out.print("*"); }

This prints a new line

System.out.println(); }

User CaptConrado
by
5.9k points