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

时间:2015-10-17 03:05:58

标签: java arrays sum character

如果标题具有误导性或令人困惑,我们很抱歉,但这是我的两难选择。 我正在输入一个字符串,并希望为字母表中的每个大写字母分配一个值(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。

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

5 个答案:

答案 0 :(得分:4)

我更喜欢使用字符文字。您知道范围为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

答案 1 :(得分:2)

使用64来表示ascii表中'A'之前的字符很难理解,你可以直接在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);

答案 2 :(得分:0)

仅将您的内容更改为:

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;是因为字符a是值97,正如您所说,您希望字符与1对应,请注意aA不同

点击此处的字符值: https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

经过测试,工作正常!祝你好运

答案 3 :(得分:0)

它看起来像这样(在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);
}

诀窍是取字符值,减去基线&#39; A&#39;值并加1以得到您的计算范围:

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

答案 4 :(得分:0)

通过使用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);