如何获取循环中产生的 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);
我更愿意使用字符文字。您知道范围是 A
到 Z
(1
到 26
),因此您可以从每个 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);
抱歉,如果标题具有误导性或令人困惑,但这是我的困境。 我正在输入一个字符串,并想为字母表中的每个大写字母分配一个值 (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);
我更愿意使用字符文字。您知道范围是 A
到 Z
(1
到 26
),因此您可以从每个 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);