2015-10-17 32 views
2

對不起,如果標題是誤導或混亂,但這是我的困境。 我正在輸入一個字符串,並且想要爲字母表中的每個大寫字母(A = 1,.. Z = 26)賦值,然後在該字符串中添加每個字母的值。如何獲得循環中生成的char值的總和?

示例: 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.

但是,我想更進一步,並將這兩個值加在一起,但我很難過,有什麼建議或幫助? (注:這不是轉讓或什麼,只是在練習習題集)

+1

您意識到這行:'if(temp <= 90&temp> = 65);'代碼沒有用處嗎?一個'if'語句必須至少有一行後面沒有括號,沒有它只是一個代碼,沒有任何區別。 –

+2

既然你已經能夠得到每個大寫字母的整數值,爲什麼不把它們加在for循環中以獲得總和呢? – Bon

+0

@JorgeCampos Java是建立在ASCII字符之上的,所以在ASCII碼中65代表「A」,90代表「Z」,我需要它到這個參數,否則當它/如果他們輸入小寫字母時我會得到錯誤的值 – Theo

回答

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 
+0

這個方法很容易地解決這個問題。謝謝,但是,有一個問題,「%s」和「%d%n」是做什麼的? – Theo

+0

[格式(Java教程)](https://docs.oracle.com/javase/tutorial/essential/io/formatting.html),*'s'將任意值格式化爲字符串。*和*'d'將整數值格式化爲十進制值。*和*'n'輸出平臺特定的行結束符。* –

2

使用64 ASCII表中的「A」之前表示字符很難理解,你可以字符之間在Java中直接執行substration 。

所以如果'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); 
+0

這個作品謝謝你!唯一的是我仍然可以輸入小寫字母,但是可以通過toUpperCase() – Theo

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 ,如你所說,你想char屬性爲1,注意a不同於A

檢查的char值在這裏:https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

此進行了測試,工作正常!好運

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); 
} 

訣竅是把字符值,減去基線「A」值並加1以達到您的計算範圍: