【发布时间】:2020-08-27 03:36:29
【问题描述】:
我有一个任务要编写一个程序,该程序将整数的数字和单词中的字母相加(每个字母的值由它在字母表中的位置给出,例如 j = 10)。经过一段时间试图找出存储和检索每个字母的值的方法后,我决定使用 HashMap ......但我想知道是否有更好的方法来做到这一点(我确定有)......所以我想得到一些关于如何改进代码和学习一些新东西的建议......谢谢!
import java.util.HashMap;
import java.util.Scanner;
public class NLS {
public static HashMap<Character, Integer> alphabet;
static {
alphabet = new HashMap<>();
alphabet.put('a', 1); alphabet.put('b', 2); alphabet.put('c', 3); alphabet.put('d', 4);
alphabet.put('e', 5); alphabet.put('f', 6); alphabet.put('g', 7); alphabet.put('h', 8);
alphabet.put('i', 9); alphabet.put('j', 10); alphabet.put('k', 11); alphabet.put('l', 12);
alphabet.put('m', 13); alphabet.put('n', 14); alphabet.put('ñ', 15); alphabet.put('o', 16);
alphabet.put('p', 17); alphabet.put('q', 18); alphabet.put('r', 19); alphabet.put('s', 20);
alphabet.put('t', 21); alphabet.put('u', 22); alphabet.put('v', 23); alphabet.put('w', 24);
alphabet.put('x', 25); alphabet.put('y', 26); alphabet.put('z', 27);
}
public static void main(String[] args) {
char keepGoing;
do {
int sum;
Scanner scan = new Scanner(System.in);
System.out.println("\n\n\n____________________________________________________________");
System.out.println("\n\tEnter a number [integer] or a word/sentence [no spaces]:\n");
String input = scan.nextLine();
boolean numeric = numberOrWord(input);
if (numeric) {
sum = digitSum(Integer.parseInt(input));
System.out.println("Result= " + sum);
} else {
char letter = calculateLetter(input);
System.out.println("Result= " + letter);
}
System.out.println("<<PRESS s/S TO CONTINUE>>");
keepGoing = scan.next().charAt(0);
} while (keepGoing == 's'||keepGoing == 'S');
}
public static boolean numberOrWord (String str){
try{
Double.parseDouble(str);
return true;
}catch(NumberFormatException e){
return false;
}
}
public static int digitSum(int number){
int sum = 0;
while(number > 0){
sum = sum + number % 10;
number /= 10;
}
return sum;
}
public static char calculateLetter(String word){
int sumPV = 0;
for(char digit : word.toCharArray()){
sumPV += alphabet.get(Character.toLowerCase(digit));
}
/* for(int i = 0, l = word.length(); i < l; i++){
char c = word.toLowerCase().charAt(i);
sumPV = sumPV + alphabet.get(c);
}*/
while(sumPV > 27){
sumPV =digitSum(sumPV);
}
char letter = (char) 0;
for(char key : alphabet.keySet()){
if(alphabet.get(key).equals(sumPV)) {
letter = key;
}
}
return letter;
}
}
【问题讨论】:
-
您不需要像这样存储值。您可以轻松计算它们。对于字母,小写字母的值等于
c - 'a' + 1;c - 'A' + 1用于大写字母。