Hey everyone, I'm writing a program as follows:
CourseMarker course Java u4 exercise sunflower: Sunflower Growth part 2 (Weight: 3)
===================================================================================
Introduction
============
This is a continuation of last weeks exercise on the growth of sunflowers, but
the problem is now more complex. It now involves loops and makes sure that you
can keep track of your variables.
Problem
=======
Last week you had to read in details of sunflowers that grow at different
speeds. This week we shall be dealing with more than one sunflower.
Therefore you are to write a program to repeatedly read
a rate of growth in cm per day (double)
the number of days growth (int)
and compute and print the height of the sunflower at the end of the time in both
centimetres, and metres and centimetres (see typical output)
This week you will also have to keep track of the number of sunflowers planted,
and also print out the average height of the sunflowers at the end.
Also, our friendly sunflower gardener has realised there is money to be made
from his venture. He is able to sell his sunflowers but only when they are
at least 120cm tall, but less than 160cm. So he would be very grateful if you
could tell him on which days he is able to sell his plants. This will
involve you printing either
The Sunflower can be sold between days 9 and 10
or
This Sunflower cannot be sold
depending on whether the sunflower is between those heights on anyday.
Because we are repeatedly reading in values, you are to ask the user if they
want to enter details for another sunflower.
Plant another Sunflower (y/n):
You are to keep reading in values for the sunflowers until the user enters an 'N'
or 'n' when you are to print the total number of sunflowers printed.
The error conditions are the same as last week.
Method
======
Read the growth rate as a double and the number of days as an int. Then compute the
height of the sunflower:
height = growthRate * numDays
However, because we need to know when/if the height passes certain limits, it
might well be easier for you to increase the height value a day at a time
and then perform checks each day.
You will also need a variable to keep track of how many sunflowers have been
planted, obviously you should not include ones who have invalid growth
rates/number of days. Again you will need a variable to help you work out
the average height of the sunflowers.
Print the results as a whole number of centimetres (rounding down) and then in
both metres and centimetres.
If the user enters a growth rate of less than or equal to 0 cm per day you are to
print the message and exit the program, do not ask them to enter a number of
days:
Error, invalid growth rate!
If the number of days growth entered is less than 1 or greater than 50 (as that's when
the display needs to be ready) you should print the following error message and exit
the program:
Error with the number of days!
Once the results have been printed you are to ask the user if they want to plant
another sunflower, if so then you are to loop round continually until the user
says no.
Once the user has finished entering sunflowers you are to print the number planted.
You have planted 1 sunflower.
You are also to print the average sunflower height.
The average height is 123cm
Unless of course more than 1 has been planted when you should replace sunflower by sunflowers in the plural. Do not count sunflowers that have invalid data.
Hints
=====
The question may seem very long and complicated, but really only consists of a
couple of parts. Try to break it down into what you think you need to do.
e.g.
read values
make it grow
check size
print
The question is also based on last weeks exercise, so you may be able to get
inspiration from there.
Notes
=====
You have five (5) submissions for this exercise.
Make sure you only count sunflowers where you print out the final height.
When you ask the user if they want to enter another sunflower, you should
only accept Y or y as a positive result anything else is negative and should be
dealt with as a no.
Constants should be static and final.
Error Conditions
================
If the user enters a growth rate of less than or equal to 0 cm per day you are to
print the message and exit, do not ask them to enter a number of
days:
Error, invalid growth rate!
If the number of days growth entered is less than 1 or greater than 50 (as that's when
the display needs to be ready) you should print the following error message and exit:
Error with the number of days!
Mark Scheme
===========
20% : Typographical tests
50% : Dynamic tests
30% : Feature tests
Typical Input
=============
Enter the growth rate: 10
Enter the number of days growth: 17
Plant another Sunflower (y/n): n
Typical Output
==============
After 17 days growth at 10.0 cm a day it is now 170 cm tall
This converts to 1 metres and 70 centimetres
The Sunflower can be sold between days 12 and 15
You have planted 1 Sunflower.
The average height is 170 cm
I've attempted to program it but I've probably got it entirely wrong, I'm a beginner in Java but here is my attempt so far, with multiple errors it won't even compile :(
class Sunloops {
// place global declarations here
static final int maxDays = 50;
static final int minDays = 1;
static final int minGrowth = 0;
char plantAnother;
public static void main (String[] args) {
// place local variables here
double growthRate;
int numDays;
int height;
double metre;
double cm;
int avgHeight;
int numSun;
int counter;
double totalHeight;
// prompt and read
UserInput.prompt ("Enter the growth rate:");
growthRate = UserInput.readDouble();
if (growthRate <= 0) {
System.out.println ("Error, invalid growth rate!");
System.exit(-1);
}
UserInput.prompt ("Enter the number of days growth: ");
numDays = UserInput.readInt();
if (numDays < 1) {
}
if (numDays > 50) {
System.out.println ("Error with the number of days!");
System.exit(-1);
}
// calculate height and work out sale dates
for (double sinDay = 1; sinDay <= numDays; sinDay++) {
height = (int) growthRate * sinDay;
metre = height / 100;
cm = height % 100;
if ((height >= 120) & ( height <= 160)) {
System.out.println ("The Sunflower can be sold between days " + sinDay-- " and " + sinDay++);
}
}
if (sinDay = numDays) {
if (height < 120)
System.out.println ("The sunflower cannot be sold");
}
if (height > 160) {
System.out.println ("The sunflower cannot be sold");
}
heightTotal =+ height;
// print results
System.out.print ("After " + numDays + " days growth at " + growthRate + " cm a day it is now ");
System.out.println (height + " cm tall");
System.out.println ("This converts to " + (int) metre + " metres and " + (int) cm + " centimetres");
// prompt for another and loop
counter = counter++;
System.out.println ("Plant another Sunflower (y/n): ");
plantAnother = UserInput.readChar();
if (plantAnother = y) {
main ();
}
if (plantAnother = n) {
finalprint ();
}
if (plantAnother = N) {
finalprint ();
}
// print avg height and number of sunflowers
int finalprint ();
avgHeight = (height / counter);
if (counter = 1) {
System.out.println ("You have printed 1 sunflower");
} else {
System.out.println ("You have printed " + counter + " sunflowers");
}
System.out.println ("The average height is " + avgHeight + " cm);
}
} // end of main
} // end of class
Any help would be GREATLY appreciated guys and gals!