has a value associated with it corresponding to its position in the alphabet. So A = 1, B = 2, …
Y = 25, Z = 26.
The program should then guess letters until every letter has been guessed. The correctly
guessed letters along with the total value of the remaining string should be displayed after every
round of guessing. Keep a record of the letters that have been guessed and use the current
value to narrow the field of possible letters. When the program is finished, the total number of
rounds should be printed out. The idea is to minimize the number of guessing rounds.
For example assuming the random string generated was: THUPHEHEY
Before the first guess, the program would display:
_ _ _ _ _ _ _ _ _ _ 116
If the program guesses H the display should read:
_ H _ _ H _ H_ _ 92
package Haoshuo;
public class GuessString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String rs = "DTUUUMN";
int value = 114;
char[] a = {'0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R'
, 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
int[] result = new int[rs.length()];
guess(rs, rs.length(), value, a, result);
}
public static void guess(String randString, int lenString, int v, char[] alph, int[] r){
int t = 0;
char[] s = randString.toCharArray();
boolean finished = true;
boolean find = false;
for(int i = alph.length - 1; i > 0; i--){
while(t < lenString){
if(Character.compare(s[t], alph[i]) == 0){
r[t] = i;
v = v - i;
find = true;
}
if(r[t] == 0){
finished = false;
}
t++;
}
if(finished){
break;
}
if(v <= 26 && find && v < i){
i = v + 1;
find = false;
}
t = 0;
for(int j = 0; j < r.length; j++){
if(r[j] == 0){
System.out.print("_");
}
else{
System.out.print(alph[r[j]]);
}
}
System.out.print(" " + v + "\n");
}
}
}