Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获得循环中生成的字符值之和?_Java_Arrays_Sum_Character - Fatal编程技术网

Java 如何获得循环中生成的字符值之和?

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

抱歉,如果标题有误导性或令人困惑,但这是我的困境。 我正在输入一个字符串,希望为字母表中的每个大写字母分配一个值(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);
        }   
      }
    }
}
公共类测试{
公共静态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
是因为char
a
是值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);