Programming Assignment Checklist: Conditionals and Loops
Frequently Asked Questions
|
What are the goals of this assignment?
To write several small Java programs so that you get accustomed to:
declaring and initializing variables, using expressions,
using conditionals and loops, arrays, and debugging your code.
What preparation do I need before beginning this assignment?
Read Sections 1.2 and 1.3 of the textbook.
Read Sections 1.3 and 1.4 of the textbook.
You may also find it instructive to work through some of the other
exercises and look at the solutions on the
booksite afterwards.
How should I format my Java code? How much do I need to comment my code?
Follow the style guidelines.
Don't forget to put your name, login and precept in the header
of every file, as well as a brief description
(and/or example run) of each program.
I have the constants 6, 10, 51, 60, and 61 sprinkled through my
TenDice program. Is there a better way?
Yes, give your constants meaningful symbolic names, such as
SIDES or NUMBER_OF_DICE. This will make your code
easier to read, maintain, and debug. Beginning on this assignment,
you will lose points for not doing so.
Do I have to use command-line arguments to read the inputs?
Yes, or you will lose a substantial number of points.
My output from RGBtoCMYK
is almost the same as the sample on the assignment page.
Only the last digit or two is different. Why is there this tiny discrepancy, and is my answer wrong?
Computers work with limited precision, and so different algebraically equivalent solutions can give slightly different answers. In grading we ignore such tiny discrepancies (except for certain assignments later where we explicitly tell you otherwise).
Submission.
When you submit,
be sure to click the Check All Submitted Files button.
Make sure that you submitted the
right files and that they compile cleanly.
You may resubmit a file after making corrections.
The newly submitted file will overwrite the old one.
These are purely suggestions for how you might make progress. You do
not have to follow these steps. The key to writing correct programs is
to develop them incrementally, testing after each step.
A drunkard's walk.
This is similar in many ways to the gambler's ruin example from
lecture and the textbook. The key to building a larger program
is developing it incrementally.
- Random walker.
First, think about what variables you need to maintain.
You certainly need to read in and store the command-line argument N.
You also need to store the current location (x, y) of the random walker.
What should be the type of the variables x and y?
What should be their initial values?
To choose a random direction, consider using the idiom from Section 1.2 to
generate a random integer in a given range.
-
Random walkers.
To get started, copy RandomWalker.java to a file RandomWalkers.java.
Now, think about what additional variables you need to maintain.
You certainly need to read in and store the command-line arguments N
and T.
In addition to the current location (x, y) of the random walker, you
need an accumulator variable, say totalSquaredDist, that stores the total
sum of squared distances so far.
Nest the loop inside an outer loop that repeats T times and add code
to update totalSquaredDist after each time through the outer loop.
Dice and the Gaussian distribution.
-
Write a program that prints the result of rolling one fair die.
To generate a random die roll, use the idiom from Section 1.2 to generate a random integer
between 0 and N-1, and modify it slightly to get one in the desired range.
-
Add a loop to print the sum of rolling 10 fair dice.
-
Add a second loop to repeat this N times,
printing out the sum after each trial. (This printing of the sum
is for testing purposes only. Remember to remove it from your
final version.)
-
Maintain an array a[] so that
a[k] stores the number of times the sum is exactly k.
Needless to say, you should continue to follow the
guidelines from earlier in the course. Here are some new conventions to keep in mind.
Efficient and clear code: This will be more important as we write
more complicated programs. This week it includes ideas like:
- Assign a command-line input to a well-named variable.
Do not repeatedly use Double.parseDouble() or
Integer.parseInt() inside mathematical expressions.
- Don't use Math.pow() if all you need to do is square or cube a
number. Multiplication is much faster.
- Think about ways to re-organize your code. Can you make it clearer
or more concise?
Here are two examples dealing with if and if-else logic:
if (condition == true)
should usually be written as if (condition)
if (x>y) { if (y>x)...
is badly written since the inner condition can never be true.
- Avoid hard-wired, unexplained constants.
- 0, 1 or 2 used in an
obvious manner is OK, but anything else should either be named,
or have a comment explaining where it comes from.
- If you do not understand the use of a constant, then a comment
stating that the equation comes from the assignment page will suffice.
- Use descriptive variable names.
- Each variable's purpose should be obvious from its name, if possible. Use condition instead of c or oldValue instead of ov.
(Only exception: simple variables like i are commonly used for loop indices.)
- Follow directions.
- If an input is listed as an integer,
read it into an integer data type.
- Follow output formats exactly.
- Did the directions specify a while or a for loop?
- Are your if-else conditions or loop boundaries missing any special extreme possibilities (corner cases)?
Here are some famous and not-so-famous
quotations
about learning to program.