2015-10-06 177 views
0

我必須根據拼字遊戲的計分規則,其得分的用戶輸入的字符串下面的代碼:把switch語句到循環的java

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; 
    } 


} 

我在想,如果有包裹switchloop,這樣的方式它不需要用手寫出26次。謝謝

+0

嗯,是的,將輸入獲取代碼封裝到一個無限循環中,並解析一個特殊的輸入以便退出。 – Mena

回答

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); 
} 

這將導致到更清晰的代碼,這也是更容易維護。

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的每個字符。