2012-10-20 58 views
1

我正在學習Java。關於java中char的算術

我應該寫一個程序,將所有大寫字母轉換爲小寫字母,所有小寫字母轉換爲大寫字母。它在書中說我只需要從大寫字母中減去32,並將32加上小寫字母。

這裏是我的代碼...

class Caseconv { 
    public static void main(String args[]) 
     throws java.io.IOException { 
      char ch; 

      do { 
      ch = (char) System.in.read(); 

      if (ch >= 97 & ch <= 122) ch = ch - 32; 
      if (ch >= 65 & ch <= 90) ch = ch + 32; 
      System.out.print(ch); 
      } while (ch != '\n'); 
     } 
} 

但是編譯器並不想這樣做,我得到這個錯誤。

Caseconv.java:13: error: possible loss of precision 
      if (ch >= 97 & ch <= 122) ch = ch - 32; 
              ^
    required: char 
    found: int 
Caseconv.java:14: error: possible loss of precision 
      if (ch >= 65 & ch <= 90) ch = ch + 32; 
              ^
    required: char 
    found: int 
2 errors 

我應該怎麼做才能從char中減去?

+0

請參閱下面的鏈接。 http://stackoverflow.com/questions/34411278/char-arithmetic-in-java/34411412#34411412 –

回答

7

您需要添加一個類型轉換爲表達式的結果轉換爲char。例如。

ch = (char)(ch + 32) 

注:

  1. 原因這是必要的,因爲32int文字,並增加一個char並使用int算術執行一個int,並給出了一個int結果。

  2. int指定爲char可能會導致截斷。有效地添加類型轉換對編譯器說:「是的,我知道,沒問題,就這樣做。」

  3. 圍繞+子表達式中的括號是必要的,因爲型鑄造具有比+更高的優先級。如果將它們排除在外,類型轉換沒有任何區別,因爲它會將char轉換爲char

2

charint之間arithmetic結果是int,你不能在一個char存儲的int沒有explicit typecasting - 由你告訴編譯器I know what I'm doing, now do it for me

所以,你需要做一個類型轉換: -

char ch = 'a'; 
    if (ch >= 97 & ch <= 122) { 
     ch = (char)(ch - 32); 
    } 
    System.out.println(ch); // Prints `A` 

但是,你已經methodCharacter類,會爲你做它: -

char ch = 'a'; 
ch = Character.toUpperCase(ch); 
System.out.println(ch); // Prints `A` 
2

嘗試

ch = (char) (ch + 32); 

如果你確定CH + 32會不會比一個字符可以容納更大。

3

類型轉換是必需的,試試這個代碼:

if (ch >= 97 & ch <= 122) 
    ch = (char) (ch - 32); 
if (ch >= 65 & ch <= 90) 
    ch = (char) (ch + 32); 
0

這是因爲你試圖給char賦一個int值(Ascii值)。但是您需要將結果值int顯式轉換爲char。只需將int轉換爲char即可。

ch= (char) (ch+32); 
ch= (char) (ch-32); 

它將與任何例外無效。