Суммируйте символы из строк и печатайте самую большую строку - PullRequest
0 голосов
/ 21 октября 2018

Я застрял в какой-то интересной задаче.У меня есть 3 строки ( привет , тяжелый & слово ).Нужно подсчитать сумму каждого мира и напечатать самый большой мир и сумму.Для вычисления - a = 1, z = 26. Итак, привет = 50, тяжелый = 61 и слово = 60. Самая большая строка - «тяжелая», и мне нужно напечатать ее как «тяжелая, 61».Я нашел код, который вычисляет символы из одной строки:

String[] words = {"hello", "heavy", "word"};

String str = "abc";
int sum = 0;

for (char ch : str.toCharArray()) {
    if (ch >= 'a' && ch <= 'z') {
        sum += 1 + ch - 'a';
    }
}
System.out.printf("%s %d%n", str, sum); //the result is abc, 6

Результат этого кода: abc, 6

Вопрос в том, как вычислить все словаа как распечатать самый большой?Я могу написать сумму для каждого слова и вычислить ее позже, но в моей задаче слова случайны с консоли. Сканирование не проблема.

Редактировать: Все слова состоят из строчных букв.

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

Вы можете легко добиться этого, используя Map<String, Integer>, где ключом является Строка , а значением является weight .

public static void main(String[] args) {
    String[] words = { "hello", "heavy", "word" };
    Map<String, Integer> hmap = new HashMap<String, Integer>();

    for (int i = 0; i < words.length; i++) {
        hmap.put(words[i], 0);
    }

    hmap.forEach((k, v) -> {
        int tot = 0;
        for (char c : k.toCharArray()) {
            tot = tot + (c - 'a' + 1);
        }
        hmap.put(k, tot);
    });
 }

Теперь вы можете выполнять итерациинад этой картой, чтобы найти самую тяжелую строку.

РЕДАКТИРОВАТЬ:

Без использования карты:

    String highString= "";
    int highest = 0;
    for (int i = 0; i < words.length; i++) {
        int tot = 0;
        for (char c : words[i].toCharArray()) {
            tot = tot + (c - 'a' + 1);
            if (highest < tot) {
                highest = tot;
                highString = words[i];
            }
        }
    }
    System.out.println(highString + "," + highest);
0 голосов
/ 21 октября 2018

Вы можете сделать что-то вроде этого:

String[] words = { "hello", "heavy", "word" };

int biggestSum = 0;
String biggestWord = null;

for (String word : words) {
    int sum = 0;

    for (char ch : word.toLowerCase().toCharArray()) {
        if (ch >= 'a' && ch <= 'z') {
            sum += 1 + ch - 'a';
        }
    }

    if (sum > biggestSum) {
        biggestSum = sum;
        biggestWord = word;
    }

    System.out.printf("%s %d%n", word, sum);
}

System.out.printf("Biggest word: %s %d%n", biggestWord, biggestSum);

Здесь мы перебираем каждое слово в words и ведем подсчет sum каждого слова.После того, как sum был вычислен, мы можем проверить, больше ли sum текущего word, чем самое большое найденное слово, и если это так, мы переопределяем biggestWord.

0 голосов
/ 21 октября 2018

Для каждого слова рассчитайте сумму слова и обновите переменную, которая содержит наибольшую сумму.Например:

int largestSum;
for (int i = 0; i < arrayOfWords.Length (); i++)
{
    // calculate the sum of the current word
    int currentWordSum = 0; 
    for (int j = 0; j < arrayOfWords[i].Length ();j++)
    {
        currentWordSum += (int)(arrayOfWords[j]);
        if (currentWordSum > largestSum)
        {
            largestSum = currentWordSum;
        }
    }
}
System.out.println (largestSum);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...