java中char的算法

时间:2012-10-20 06:34:32

标签: java compiler-errors

我正在学习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

我应该做些什么来减去char?

5 个答案:

答案 0 :(得分:8)

您需要添加类型转换以将表达式的结果转换为char。例如。

ch = (char)(ch + 32)

注意:

  1. 这是必要的原因是因为32int字面值,并且charint的添加是使用{{1}执行的算术,并给出int结果。

  2. int分配给int可能会导致截断。有效地添加类型转换对编译器说:“是的。我知道。没关系。就这样做。”

  3. char子表达式周围的括号是必要的,因为type-cast的优先级高于+。如果你把它们排除在外,那么类型转换就没有区别,因为它会将+“施放”到char

答案 1 :(得分:3)

需要输入类型,请尝试以下代码:

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

答案 2 :(得分:2)

arithmeticchar之间的int结果为int,如果没有int,您就无法存储char 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`

但是,method课程中你已经Character,它会为你做到: -

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

答案 3 :(得分:2)

尝试

ch = (char) (ch + 32);

如果你确定ch + 32不会超过char可以容纳的值。

答案 4 :(得分:0)

这是因为你试图将一个int值(Ascii值)赋给char。但是您需要将结果值int显式转换为char。只需将int转换为char。

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

它可以解决任何异常。