java中字符的算法

java中字符的算法,java,compiler-errors,Java,Compiler Errors,我正在学习Java 我应该写一个程序,将所有大写字母转换为小写字母,并将所有小写字母转换为大写字母。书中说我只需要从大写字母中减去32,在小写字母中加上32 这是我的密码 class Caseconv { public static void main(String args[]) throws java.io.IOException { char ch; do { ch = (char) Syst

我正在学习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
我应该怎么做才能从字符中减去?

字符和int之间的算术结果是int,如果没有显式的类型转换,就不能在字符中存储int-通过它,你告诉编译器我知道我在做什么,现在帮我做吧

因此,您需要进行类型转换:-

    char ch = 'a';
    if (ch >= 97 & ch <= 122) {
       ch = (char)(ch - 32);
    } 
    System.out.println(ch);  // Prints `A`
一个字符和一个int之间的算术结果是一个int,如果没有显式的类型转换,你就不能在一个字符中存储一个int,通过它你告诉编译器我知道我在做什么,现在为我做吧

因此,您需要进行类型转换:-

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

如果您确定ch+32不会大于一个字符所能容纳的容量。

试试看


如果您确定ch+32不会大于字符的容量。

需要类型转换,请尝试以下代码:

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

如果需要类型转换,请尝试以下代码:

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

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

ch = (char)(ch + 32)
注:

之所以需要这样做,是因为32是一个int文本,而char和int的加法是使用int算术执行的,并给出int结果

将int赋值给char可能会导致截断。添加类型转换有效地对编译器说:是。我知道。没关系。就这么做吧

+子表达式周围的括号是必需的,因为类型转换的优先级高于+。如果不使用它们,则类型转换没有任何区别,因为它将一个字符转换为一个字符


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

ch = (char)(ch + 32)
注:

之所以需要这样做,是因为32是一个int文本,而char和int的加法是使用int算术执行的,并给出int结果

将int赋值给char可能会导致截断。添加类型转换有效地对编译器说:是。我知道。没关系。就这么做吧

+子表达式周围的括号是必需的,因为类型转换的优先级高于+。如果不使用它们,则类型转换没有任何区别,因为它将一个字符转换为一个字符


这是因为您试图为字符分配一个int值Ascii值。但是您需要显式地将结果值int转换为char。只需将int转换为char

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

它将在没有任何异常的情况下工作。

这是因为您试图为字符分配一个int值Ascii值。但是您需要显式地将结果值int转换为char。只需将int转换为char

ch= (char) (ch+32);
ch= (char) (ch-32);
它可以正常工作。

请参阅下面的链接。请参阅下面的链接。