CS 305J Assignment 9, File Processing and Arrays II
| Programming Assignment 9 | Pair Assignment. You may work with one other person (You
make work with one other person on this assignment using the pair
programming technique.. You may work with anyone in the class. They do not
have to be in the same discussion section as you or the same partner as on
previous assignments. One solution will be turned in for the pair. Once you start
working with one partner on an assignment you may not switch partners. If
you do not wish to work with a partner after starting on an assignment you
must both complete it individually. The intent here is you work on the
assignment together, at the same time, at the same computer. Do not simply
try to work on different parts independently and then try to put it
together. You may choose to work alone if you wish.) Placed online:
October 29 |
|||||||||||||||||||||||||
| Description | The purposes of this assignment are:
Thanks to Stuart Reges for sharing this assignment with me. For this assignment you are limited to the language features in chapters 1 through 7 of the textbook. You are going to write a program that processes an input file of data for a personality test known as the Keirsey Temperament Sorter. The Keirsey personality test involves answering 70 questions each of which have two answers. We will refer to them as the “A” answer and the “B” answer. People taking the test are allowed to leave a question blank, in which case their answer will be recorded with a dash (“-”). The input file will contain a series of line pairs, one per person. The first line will have the person’s name (possibly including spaces) and the second line will have a series of 70 letters all in a row (all either “A”, “B” or “-”). Your job is to compute the scores and overall result for each person and to report this information to an output file. The Keirsey test measures four independent dimensions of personality: Extrovert versus Introvert (E vs I): what energizes you Sensation versus iNtuition (S vs N): what you focus on Thinking versus Feeling (T vs F): how you interpret what you focus on Judging versus Perceiving (J vs P): how you approach life Individuals are categorized as being on one side or the other of each of these dimensions. The corresponding letters are put together to form a personality type. For example, if you are an extravert, intuitive, thinking, perceiving person then you are referred to as an ENTP. Usually the letter used is the first letter of the corresponding word, but notice that because the letter “I” is used for “Introvert”, the letter “N” is used for “iNtuition.” Remember that the Keirsey test involves 70 questions answered either A or B. The A answers correspond to extravert, sensation, thinking and judging (the left-hand answers in the list above). The B answers correspond to introvert, intuition, feeling and perceiving (the right-hand answers in the list above). For each of these dimensions, we determine a number between 0 and 100 and indicate whether they were closer to the A side or the B side. The number is computed by figuring out what percentage of B answers the user gave for that dimension (rounded to the nearest integer). Here is a specific example. Suppose that someone’s answers divide up as follows:
These numbers correspond to the answers given by the first person in the sample input file (“Betty Boop”). We add up how many of each type of answer we got for each of the four dimensions. Then we compute the percentage of B answers for each dimension. Then we assign letters based on which side the person ends up on for each dimension. In the Extrovert/Introvert dimension, for example, the person gave 9 “B” answers out of 10 total, which is 90%, which means they end up on the B side which is “Introvert” or I. In the Sensing/iNtuition dimension the person gave 3 “B” answers out of 20 total, which is 15%, which means they end up on the A side with is “Sensing” or S. The overall scores for this person are the percentages (90, 15, 10, 10) which works out to a personality type of ISTJ. Some people will end up with a percentage of 50 in one or more dimensions. This represents a tie, where the person doesn’t clearly fall on either side. In this case we use the letter “X” to indicate that the person is in the middle for this particular dimension. The last two entries in the small sample input file end up with X’s in their personality type. Take a moment to compare the small sample input file and the small sample output file and you will see that each pair of lines in the input file is turned into a single line of output in the output file that reports the person’s name, the list of percentages and the personality type.
Your program will read from a designated input file obtained by the
To count the number of A and B answers for each dimension, you need to know something about the structure of the test. The test has 10 groups of 7 questions with a repeating pattern in each group of 7 questions. The first question in each group is an Introvert/Extrovert question (questions 1, 8, 15, 22, etc). The next two questions are for Sensing/iNtuition (questions 2, 3, 9, 10, 16, 17, 23, 24, etc). The next two questions are for Thinking/Feeling (questions 4, 5, 11, 12, 18, 19, 25, 26, etc). And the final two questions in each group are for Judging/Perceiving (questions 6, 7, 13, 14, 20, 21, 27, 28, etc). Notice that there are half as many Introvert/Extrovert questions as there are for the other three dimensions. The seventy letters in the input file appear in question order (first letter for question 1, second letter for question 2, third letter for question 3, etc). Remember that the user might leave a question blank, in which case you will find a dash in the input file for that question. Dash answers are not included in computing the percentages. For example, if for one of the dimensions you have 6 A answers, 9 B answers and 5 dashes, you would compute the percentage of B answers as 9 of 15, or 60%.
You
should round percentages to the nearest integer. You can
round by adding one-half and casting to an integer. For
example, if you have a variable of type
Or you can use the
For
this assignment you are to read from a file chosen by the user and
write your results to the console using
You
can read the user’s answers from the input file using a call to the method
One of the things to keep in
mind for this program is that you transform data from one form to
another many times. This is a fundamental operation and concept in
the world of computation and computer programming. You start with a Notice that the letters “A” and “B” in the sample input file sometimes appear as uppercase letters and sometimes appear as lowercase letters. Your program must recognize and deal with the correctly in either case. You may assume that the input file has no errors. In particular, you may assume that the file is composed of pairs of lines and that the second line in each pair will have exactly 70 characters that are either A, B or dash (although the A’s and B’s might be in either uppercase form or lowercase form or a combination). You may also assume that nobody has all dashes (no answer) for a given dimension (it would be impossible to determine a percentage in that case). The sample input and output files provide just a few simple examples of how this program works. We will be using a much more extensive file for testing your program. Your program is likely to have the number “4” in several places because of the four dimensions of this test. You should introduce a class constant to make this more readable instead of using 4 itself. It won’t be possible, however, to change this constant to some other number and have the program function properly. The constant is helpful for documentation purposes, but it won’t make the program particularly flexible or general. I will once again be expecting you to use good programming style and to include useful comments throughout your program. I am not specifying how to decompose this problem into methods, but we will be grading on the quality of your decomposition. That means you will have to decide how to decompose the program into methods. You should keep in mind the ideas we have been stressing all semester. You don’t want to have redundant code. You don’t want to have any one method be overly long. You want to break the problem down into logical sub-problems so that someone reading your code can see the sequence of steps it is performing. You should use proper style: indenting, spacing, good identifiers, parameters to pass information from one method to another, comments on methods that summarize what they do. You can find out more about the Keirsey Temperament Sorter at http://www.keirsey.com. Turn in your program named Personality.java using the turnin program. If you are working with a partner turn in the file to only one person's account. |
|||||||||||||||||||||||||
| Files |
|
|||||||||||||||||||||||||
| Checklist | Did you remember to:
|