我有以下代码根据Scrabble评分规则对用户输入字符串进行评分:
import java.util.Scanner;
public class ScrabbleScorer {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.print ("Enter string: ");
String str = sc.nextLine();
int score = computeScore (str);
System.out.println ("The score for '" + str + "' is: " + score);
sc.close();
}
public static int computeScore (String str) {
str = str.toUpperCase();
int score = 0;
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
switch(ch){
case 'A': score = score + 1;break;
case 'B': score = score + 3;break;
case 'C': score = score + 3;break;
case 'D': score = score + 2;break;
case 'E': score = score + 1;break;
case 'F': score = score + 4;break;
case 'G': score = score + 2;break;
case 'H': score = score + 4;break;
case 'I': score = score + 1;break;
case 'J': score = score + 8;break;
case 'K': score = score + 5;break;
case 'L': score = score + 1;break;
case 'M': score = score + 3;break;
case 'N': score = score + 1;break;
case 'O': score = score + 1;break;
case 'P': score = score + 3;break;
case 'Q': score = score + 10;break;
case 'R': score = score + 1;break;
case 'S': score = score + 1;break;
case 'T': score = score + 1;break;
case 'U': score = score + 1;break;
case 'V': score = score + 4;break;
case 'W': score = score + 4;break;
case 'X': score = score + 8;break;
case 'Y': score = score + 4;break;
case 'Z': score = score + 10;break;
default : score = score;
}
}
return score;
}
}
我想知道是否有办法将switch
包裹到loop
中,这样就不必用手写出26次。感谢
答案 0 :(得分:1)
我认为你可以使用另一种更清洁的方法。
您可以使用HashMap<Character, Integer>
来存储角色点组合。然后你只需遍历字符串并增加你的分数:
HashMap<Character, Integer> pointScheme = new HashMap<>();
pointScheme.put('A', 1);
...
str = str.toUpper();
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
score += pointScheme.get(ch);
}
这应该会产生更清晰的代码,也更容易维护。
答案 1 :(得分:0)
您可以采取的另一种方式:
public static int computeScore (String str) {
//0-A, 1-B, 2-C, ....
char[] scoresTable = {1, 3, 3, 2, 1, 4};
str = str.toUpperCase();
int score = 0;
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
score += scoresTable[ch - 'A'];
}
return score;
}
您可以使用数组来存储分数。每个元素等同于从A到Z的每个字符。