我正在学习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?
答案 0 :(得分:8)
您需要添加类型转换以将表达式的结果转换为char
。例如。
ch = (char)(ch + 32)
注意:
这是必要的原因是因为32
是int
字面值,并且char
和int
的添加是使用{{1}执行的算术,并给出int
结果。
将int
分配给int
可能会导致截断。有效地添加类型转换对编译器说:“是的。我知道。没关系。就这样做。”
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)
arithmetic
与char
之间的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);
它可以解决任何异常。