如何获取循环中产生的 char 值的总和?

How to get sum of char values produced in a loop?

抱歉,如果标题具有误导性或令人困惑,但这是我的困境。 我正在输入一个字符串,并想为字母表中的每个大写字母分配一个值 (A=1, .. Z=26),然后将每个字母的值添加到该字符串中。

示例: ABCD = 10(因为 1 + 2 + 3 + 4)

但我不知道如何将字符串中的所有值相加

注意:这仅适用于大写字母和字符串

public class Test {

    public static void main(String[] args) {

        Scanner scannerTest = new Scanner(System.in);
        System.out.println("Enter a name here: ");

        String str = scannerTest.nextLine();

        char[] ch = str.toCharArray();
        int temp_integer = 64;

        for (char c : ch) {
            int temp = (int) c;

               if (temp <= 90 & temp >= 65){
            int sum = (temp - temp_integer);
            System.out.println(sum);
        }   
      }
    }
}

因此,如您所见,我打印出每次循环的总和, 意思是:如果我输入 "AB",输出将是 1 和 2.

但是,我想更进一步,将这两个值加在一起,但我很困惑,有什么建议或帮助吗? (注意:这不是作业或任何东西,只是练习问题集)

asciitable中'A'前的字符用64表示比较难理解,可以直接在Java中的字符之间进行减去

因此,如果 'A' 表示 1,那么只需执行 c - 'A' + 1 将为每个大写字母提供相应的整数值。

要求和,只需求和:将求和初始化为0,然后在for循环中,将增量求和加到你计算的值上。可以使用增量赋值操作:+=

Scanner scannerTest = new Scanner(System.in);
    System.out.println("Enter a name here: ");

    String str = scannerTest.nextLine();

    char[] ch = str.toCharArray();
    int sum = 0;
    for (char c : ch) {
        sum += c - 'A' + 1;
    }
    System.out.println(sum);

我更愿意使用字符文字。您知道范围是 AZ126),因此您可以从每个 char 中减去 'A'(但是您需要加 1,因为它不是从 0 开始的)。我还会在输入行上调用 toUpperCase 。像,

Scanner scannerTest = new Scanner(System.in);
System.out.println("Enter a name here: ");
String str = scannerTest.nextLine().toUpperCase();
int sum = 0;
for (char ch : str.toCharArray()) {
    if (ch >= 'A' && ch <= 'Z') {
        sum += 1 + ch - 'A';
    }
}
System.out.printf("The sum of %s is %d%n", str, sum);

我用你的例子测试过

Enter a name here: 
ABCD
The sum of ABCD is 10

仅将您的 for 更改为这些:

int sum = 0;
for(int i = 0; i < ch.length; i++){
    sum += (int) ch[i] - 96;
    System.out.println(sum);
}

sum += (int) ch[i] - 96; 是因为 char a 是值 97,正如你所说,你想要 char 对应于 1,注意 a 不同于 A

检查这里的字符值: https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

这已经过测试并且运行良好!祝你好运

它看起来像这样(在 C 编程语言中),您可以针对其他编程语言轻松修改它:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  int i;
  char word[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  unsigned int sum = 0;
  unsigned int charVal;

  for (i=0; i < strlen(word); ++i) {
    charVal = word[i] - 'A' + 1;
    printf("Value of %c is %d\n", word[i], charVal);
    sum += charVal;
  }
  printf("Sum of %s = %d\n", word, sum);
  return(0);
}

诀窍是取字符值,减去基线 'A' 值并加 1 以达到您的计算范围:

charVal = word[i] - 'A' + 1;

通过使用 Java 8 的 lambda 函数以简洁的方式实现相同的目的

String str = "ABCD";
int sum = str.chars()
                .filter(c -> c >= 'A' && c <= 'Z')
                .map(c -> 1 + c - 'A')
                .reduce(0, Integer::sum);