2016-06-02 4 views
-2

Так что я пытаюсь решить проблему на Java ниже. Может ли кто-нибудь дать мне представление о том, как подойти к этому? Я могу думать только об использовании путаницы для циклов, чтобы разделить arr, пройти алфавит и пройти через каждую строку, и даже тогда меня путают строки и символы. Будем признательны любому совету.Java: присвойте значения алфавиту и определите значение строки

-

Пусть буква «А» стоит 1, «В» стоит 2, и так далее, с «Z» стоит 26. Значение слова является суммой всех письма значения в нем. Учитывая массив arr слов, состоящий из заглавных букв, верните значение часов с наибольшим значением. Можно предположить, что обры имеют длину по меньшей мере, 1.

{ "ААА", "В", "ССС"} => 9

{ "АААА", "В", "С"} => 4

{ "Z"} => 26

{ "", ""} => 0

-

Вот что я пытался до сих пор, но я потерян :

public static int largestValue(String[] arr){ 
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    int largest = 0; 
    int wordTotal=0; 

    for (int i = 0; i < arr.length; i++){ 
     String[] parts = arr[i].split(""); 

     if (wordTotal < largest){ //I don't think this is in the right place 
      largest = 0; } 

     for (int j = 0; j < alphabet.length(); j++){ 

      for(int k = 0; k <parts.length; k++){ 
       if (alphabet.charAt(j) == parts[k].charAt(0)){ 
        wordTotal = 0; 
        wordTotal += alphabet.indexOf(alphabet.charAt(j))+1; 

       } 
      } 
     } 
    } 
    return largest; 
} 
+3

Какой код вы пробовали? –

+0

При анализе требований вы должны определить, насколько они надежны. «Обещание» сопоставления, происходящего из букв капитала [basic Latin] (https://en.wikipedia.org/wiki/Basic_Latin_ (Unicode_block)) в порядке английского алфавита с целыми числами от 1 до 26, кажется довольно слабым , Итак, я думаю, что хорошо, что вы создаете свой собственный «алфавит», а не полагаетесь на их последовательность в кодировке набора символов. (Строка представляет собой подсчитанную последовательность юникодов UTF-16). –

ответ

2

Я бы начал, разбив проблему на части, первый шаг суммирует один String. Чтобы вычислить sum, вы можете перебирать символы, проверить, находится ли символ между 'A' и 'Z' (хотя ваши требования заявляют, что ваш ввод гарантированно действителен), вычтите из символа 'A' (a char), и добавьте его в ваш sum.Нечто подобное,

static int sumString(final String str) { 
    int sum = 0; 
    for (char ch : str.toCharArray()) { 
     if (ch >= 'A' && ch <= 'Z') { // <-- validate input 
      sum += 1 + ch - 'A';  // <-- 'A' - 'A' == 0, 'B' - 'A' == 1, etc. 
     } 
    } 
    return sum; 
} 

Затем вы можете перебирать массив String (ов), чтобы получить максимальную сумму; что-то вроде

static int maxString(String[] arr) { 
    int max = sumString(arr[0]); 
    for (int i = 1; i < arr.length; i++) { 
     max = Math.max(max, sumString(arr[i])); 
    } 
    return max; 
} 

или с Java 8+

static int maxString(String[] arr) { 
    return Stream.of(arr).mapToInt(x -> sumString(x)).max().getAsInt(); 
} 

И, наконец, , проверить всю операцию, как

public static void main(String[] args) { 
    String[][] strings = { { "AAA", "BBB", "CCC" }, { "AAAA", "B", "C" }, 
      { "Z" }, { "", "" } }; 
    for (String[] arr : strings) { 
     System.out.printf("%s => %d%n", Arrays.toString(arr), maxString(arr)); 
    } 
} 

И я получаю

[AAA, BBB, CCC] => 9 
[AAAA, B, C] => 4 
[Z] => 26 
[, ] => 0 
1

Я думаю, что это помогает принять к сведению двух ключевых частей здесь:

1: Вы должны быть в состоянии найти значение одного слова, которое является суммой каждой буквы

2 : Вам нужно найти значение всех слов и найти наибольшее значение

Поскольку вам нужно пройти через каждый элемент (букву/символ) в строке, а также каждый элемент (слово) в массиве, проблема действительно настроен для использования 2 циклов. Я думаю, что часть всей проблемы делает циклы for понятными и лаконичными, что, безусловно, выполнимо. Я не хочу отдать его, но функция, которая, учитывая слово, возвращает значение слова, поможет. Вы можете найти значение слова, посмотреть, насколько он самый большой и повторить. Кроме того, чтобы найти значение слова, , пожалуйста, не использовать 26 if's (вместо этого найдите таблицу ASCII!). Надеюсь, это даст вам лучшее понимание, не отдавая его!

 Смежные вопросы

  • Нет связанных вопросов^_^