Java 如何获得循环中生成的字符值之和?
抱歉,如果标题有误导性或令人困惑,但这是我的困境。 我正在输入一个字符串,希望为字母表中的每个大写字母分配一个值(a=1,…Z=26),然后将该字符串中每个字母的值相加 示例:ABCD=10(从1+2+3+4开始) 但我不知道如何将字符串中的所有值相加 注意:这仅适用于大写字母和字符串Java 如何获得循环中生成的字符值之和?,java,arrays,sum,character,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 Scann
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);
}
}
}
}
公共类测试{
公共静态void main(字符串[]args){
扫描仪扫描测试=新扫描仪(System.in);
System.out.println(“在此处输入名称:”);
String str=scannerTest.nextLine();
char[]ch=str.toCharArray();
整数=64;
for(字符c:ch){
int temp=(int)c;
如果(温度=65){
int sum=(temp-temp_整数);
系统输出打印项数(总和);
}
}
}
}
你可以看到,每次循环,我都会打印出总数,
意思:如果我输入“AB”,输出将是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);
我更喜欢使用字符文字。您知道范围是
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);
仅将您的更改为以下内容:
int sum = 0;
for(int i = 0; i < ch.length; i++){
sum += (int) ch[i] - 96;
System.out.println(sum);
}
int和=0;
for(int i=0;i
sum+=(int)ch[i]-96
是因为chara
是值97,正如您所说,您希望char a对应于1,请注意a
不同于a
检查此处的字符值:
这是测试和工作良好!祝您好运它看起来像这样(在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);
}
通过使用Java8的lambda函数以简洁的方式实现这一点
String str = "ABCD";
int sum = str.chars()
.filter(c -> c >= 'A' && c <= 'Z')
.map(c -> 1 + c - 'A')
.reduce(0, Integer::sum);
String str=“ABCD”;
int sum=str.chars()
.filter(c->c>='A'&&c 1+c-'A')
.reduce(0,整数::和);
您意识到这一行:if(temp=65)代码>在代码中没有任何用途,对吗?if
语句后面必须至少有一行,不带括号,否则它只是一个不会有任何区别的代码。既然您已经能够获得每个大写字母的整数值,为什么不在for循环中将它们相加以获得总和呢?@JorgeCampos Java是基于ASCII字符构建的,所以在ASCII中,数字65代表“A”,90代表“Z”,我需要它来表示该参数,否则当它们输入小写字母时,我会得到错误的值。我知道,我知道这一点,因为我从1989年开始是一名程序员,从MS Basic开始。你不明白我的意思。慢慢读,试着理解它的意思。@BOND我不知道该怎么做,我是Java初学者,所以我很抱歉,我写的代码会打印每个字符的值之和,但我不知道该写什么来打印每个字符的值之和。谢谢!唯一的问题是,我仍然可以输入小写字母,但这可以通过toUpperCase()方法轻松解决。这非常有效!谢谢,但有一个问题,“%s”和“%d%n”做什么?s
将任何值格式化为字符串。和d
将整数值格式化为十进制值。和n
输出特定于平台的线路终止符。
charVal = word[i] - 'A' + 1;
String str = "ABCD";
int sum = str.chars()
.filter(c -> c >= 'A' && c <= 'Z')
.map(c -> 1 + c - 'A')
.reduce(0, Integer::sum);