2015-02-05 3 views
0

Мне нужно написать код скремблера в java без использования операторов if/switch. это то, что я до сих порScrabble code in java

public class Scrabble { 


public static void main(String[] args) { 
} 

    public static int computeScore(String word) { 

String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    int[] values = {1,3,3,2,1,4,2,4,1,8,5,1,3,1,3,3,10,1,1,1,1,4,4,8,4,10}; 
    int sum = 0; 
    for(int i = 0; i <word.length();i++) { 
     ???? 

    } 
return sum; 

} 

} 

мне нужна помощь, у меня была идея найти символ внутри строки и находить его значение, но не знаете, как писать его. Любая помощь будет отличной! Благодаря!

ответ

1

Внутри вас цикл вам нужно будет сделать следующее:

sum += values[aplphabet.indexOf(word.charAt(i))]; 

Таким образом, ваш цикл должен так что-то вроде:

for(int i = 0; i <word.length();i++) { 
    sum += values[aplphabet.indexOf(word.charAt(i))]; 
} 

Это, конечно, не обрабатывать любые модифицирующие плитки на царапают доска.

В качестве альтернативы вы можете использовать HashMap<char, int> хранить ваши письма, так что доступ к ним немного проще:

public class Scrabble { 

    HashMap<char, int> alphabet; 

    public static void main(String[] args) { 

     //initialize the alphabet and store all the values 
     alphabet = new HashMap<char, int>(); 
     alpahbet.put('A', 1); 
     alpahbet.put('B', 3); 
     alpahbet.put('C', 3); 
     //... 
     alpahbet.put('Z', 10); 
    } 

    public static int computeScore(String word) { 
     int sum = 0; 
     for(int i = 0; i <word.length();i++) { 
      //look up the current char in the alphabet and add it's value to sum 
      sum += alphabet.get(word.charAt(i)); 
     } 
     return sum; 

    } 

} 
+0

Спасибо! теперь моя единственная забота заключается в том, что это применимо только в том случае, если буквы являются ВЕРХНИЙ СЛУЧАЙ, я получаю исключение индекса за пределами, когда пытаюсь вставить слово с нижним регистром. Есть ли способ исправить это? думал, что метод toLowerCase – swordhunter2000

+0

@KennyHuynh самый простой способ без изменения вашего кода будет заключаться в том, чтобы добавить эту строку к вашей функции 'computeScore' над циклом:' word = word.toUpperCase(); 'Это заставит все строки иметь верхний регистр. –

+0

ahh Я получаю это, заставляя слово быть все в верхнем регистре, все будет хорошо. Огромное спасибо!!! – swordhunter2000