String Problems Page 1
String Problems
Problem 1: Scantron Grading Create a program that uses string methods to simulate grading a test of multiple choice questions using a scantron. The program first asks for the number of questions on the test
(validate that it is at least 3). Then ask for the answer key which is input as a string. Validate that there are exactly the right number of answers. Also answers must only be a, b, c, or d (upper or lower case).
Then ask how many tests there are to grade (validate that it is at least 2). For each student, input their answers (must do the same validation of number of questions and all a, b, c, or d.)
Grade the test. Show the results and the number correct, along with the percentage.
You will write the following three methods: public static String getInput(int numquestions) This function receives the number of test questions as a parameter. Its job is to read the user’s
input from the keyboard and validate it. There are two checks: Make sure it is the proper length, if not loop and allow user to re-enter. You should change the string to all upper case letters to make the second validation easier.
Call isValid to make sure that all characters are only only A, B, C, or D. Loop to allow user to re-enter. This function returns a validated string with all upper case letters. (Note that the prompt “Enter key” or “Enter student answer” is done in main, that way this
same function can be used to input the key and the student answers.) public static boolean isValid(string inputstr) This method receives a String parameter and checks that all the letters are only A, B, C, or D are input. Return false if any invalid letter is found, otherwise return true.
public static int gradeTest(String key, String stuanswers) This method receives two strings as parameters, the key and the student answers. It grades
each test by checking each answer. Generate output as shown below. It also counts the number correct and returns the number of correct answers. Sample Output (Test case 1) How many questions? 5
Enter answer key : aba
Must be exactly 5 answers, re-enter: aBcbD
Test key: ABCBD
How many tests to grade? 3
Enter student 1 answers: bbccd
Question Key Student
1 A B
2 B B correct!
3 C C correct!
4 B C
5 D D correct!
String Problems Page 2
Number correct: 3
Score is 60.0%
Enter student 2 answers: cbcbd
Question Key Student
1 A C
2 B B correct!
3 C C correct!
4 B B correct!
5 D D correct!
Number correct: 4
Score is 80.0%
Enter student 3 answers: daddc
Question Key Student
1 A D
2 B A
3 C D
4 B D
5 D C
Number correct: 0
Score is 0.0%
Also do a second test case of your choice
Problem 2: Hangman Write a program that plays the “hangman” game to guess letters in a word.
What data is needed?
The word to guess – to be selected and returned by the pickWord function.
The character that the user guesses
A string to keep track of all the letters that have been guessed correctly
A string to keep track of all guesses (to eliminate repeat guesses)
You will to write two methods:
public static String pickWord() //create an array with 10 words in it (or more if you like) //use random number generator to select a word from the array //return this word
Code and TEST this function first to show that it will print random words
You will need a function to display the secret word with ‘-‘ in the unguessed letters and the
guessed letters “revealed”.
public static String reveal(String word, String letters) This method receives as input two strings: the word to be guessed, and a string with all the
correctly guessed characters so far. The job of this method is to create and return a new string
with unguessed letters displayed as ‘-‘ and guessed letters are revealed. You are going to build a
String Problems Page 3
new string to be returned character by character by gluing or concatenating one letter at a time.
Remember you can “glue” two strings together using the + (concatenation) operator.
Loop through each letter in the word to be guessed:
if it appears in the guessed letter string then “glue” the letter onto the result.
If not, glue “-“.
(Hint: The indexOf method is VERY useful to determine if a letter is in a string)
You should run some simple tests as you code and debug this function.
So let’s say the word to guess is “hello”. Initially there are no guesses, so the guessed letters
string is empty (“”).
Test should print
System.out.println(maskWord(“hello”, “”)); -----
//”hello” is the word, no letters guessed yet
Next guess is “l” System.out.println(maskWord(“hello”, “l”)); --ll-
//the letter ‘l’ has been guessed
h is not in “hello”, so you append –
e is not in “hello”, so you append –
l IS in “hello”, so append ‘l’
l IS in “hello”, so append ‘l’
o is not in “hello”, so append ‘-‘
Next guess is “h” System.out.println(maskWord(“hello”, “lh”)); h-ll-
//the letters ‘l’ and ‘h’ have been guessed
Once these 2 methods are written, write the code to “play” the game. It will require a loop for
the user to guess. Loop until the word is guessed.
The user inputs a letter, you need to check if that letter appears in the word
Make sure to handle upper/lower case letters, so that if the user enterers ‘H’ or ‘h’ it will match ‘h’.
If it does then you call reveal to show the revealed letters
You will need to think about how to determine when all the letters are guessed.
Once the basic game works, enhance with:
Keep a String with of previous guessed letters and don’t allow a letter to be guessed twice (validation)
OPTIONAL: To make it more challenging, give the user only a certain number of “strikes” or
bad guesses.
String Problems Page 4
Sample run (Keeping track of previously guessed letters) I am thinking of a word with 8 letters
--------
Guess a letter: t
Good guess!
-----t--
Guess a letter: h
Bad guess...
-----t--
Guess a letter: r
Good guess!
-----t-r
Guess a letter: h
you already guessed that
Previous letters: thr
Guess a letter: c
Good guess!
c----t-r
Guess a letter: p
Good guess!
c--p-t-r
Guess a letter: d
Bad guess...
c--p-t-r
Guess a letter: m
Good guess!
c-mp-t-r
Guess a letter: d
you already guessed that
Previous letters: thrcpdm
Guess a letter: u
Good guess!
c-mput-r
Guess a letter: e
Good guess!
c-mputer
Guess a letter: o
Good guess!
You won!
TESTING: Show the output from playing the game two differen