1

私はJavaを学んでいます。

すべての大文字を小文字に、すべての小文字を大文字に変換するプログラムを作成することになっています。この本には、大文字から 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

文字から減算するにはどうすればよいですか?

4

5 に答える 5

8

式の結果を に変換するには、型キャストを追加する必要がありますchar。例えば。

ch = (char)(ch + 32)

ノート:

  1. これが必要な理由32は、 がintリテラルであり、acharと anの加算が算術intを使用して実行され、結果が得られるためです。intint

  2. をに代入するintと、char切り捨てられる可能性があります。型キャストを追加すると、コンパイラに対して効果的に「はい。わかっています。問題ありません。実行してください。」

  3. +型キャストは よりも優先順位が高いため、部分式を括弧で囲む必要があり+ます。それらを省略した場合、型キャストは acharを aに「キャスト」するため、違いはありませんchar

于 2012-10-20T06:38:27.277 に答える
3

型キャストが必要です。次のコードを試してください。

if (ch >= 97 & ch <= 122)
    ch = (char) (ch - 32);
if (ch >= 65 & ch <= 90)
    ch = (char) (ch + 32);
于 2012-10-20T06:37:10.860 に答える
2

aと anのarithmetic間の結果は an であり、 anなしで aに格納することはできません-これにより、コンパイラにそれを伝えますcharintintintcharexplicit typecastingI 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`
于 2012-10-20T06:36:31.210 に答える
2

試す

ch = (char) (ch + 32);

ch + 32 が char が保持できるものよりも大きくないことが確実な場合。

于 2012-10-20T06:36:35.443 に答える
0

これは、int 値 (Ascii 値) を char に割り当てようとしているためです。ただし、結果値 int を明示的に char に変換する必要があります。int を char にキャストするだけです。

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

例外なく動作します。

于 2015-12-22T10:23:25.747 に答える