Java中的char算术

时间:2015-12-22 08:17:46

标签: java

我编写了下面的代码,将小写转换为大写,将大写转换为小写,但它运行不正常。此代码触发以下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Type mismatch: cannot convert from int to char
    Type mismatch: cannot convert from int to char
    at learn.Example.main(Example.java:20)
public class Example 
{
    public static void main(String args[])
    throws java.io.IOException
    {
        char ch;

        System.out.println("Enter an alphabet only: ");

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

            if (ch>='a' & ch <= 'z')
            {
                ch= ch-32;
                System.out.println(ch);
            }
            if (ch >='A' & ch <= 'Z')
            {
                ch = ch + 32;
                System.out.println(ch);
            }
        }
        while (ch != '.');
    }
}

5 个答案:

答案 0 :(得分:6)

更改

ch = ch - 32;

ch = (char) (ch - 32);

因为此算术运算符的结果是int,必须明确地转换为char

同样改变

ch = ch + 32;

ch = (char) (ch + 32);

答案 1 :(得分:2)

只需cast就像这样:

   ch= ch-32;

要:

   ch= (char) (ch-32);

而且:

  ch = ch + 32;

要:

 ch = (char) (ch + 32);

答案 2 :(得分:1)

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

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

它可以解决任何异常。

答案 3 :(得分:0)

在你的代码块(ch-32)和ch + 32中,它将返回int并且你要分配给char,你需要明确地将它强制转换为char。

将int转换为char belwo是代码片段。

如果要在int中强制转换值,可以使用Java的类型符号表示它:

int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'

如果您想将整数1转换为字符&#39; 1&#39;,您可以这样做:

if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}

此处修改后的代码为

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

            System.out.println("Enter an alphabet only: ");

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

                if (ch>='a' & ch <= 'z')
                {
                    ch= (char) (ch-32);
                    System.out.println(ch);
                }
                if (ch >='A' & ch <= 'Z')
                {
                    ch = (char) (ch + 32);
                    System.out.println(ch);
                }
            }
            while (ch != '.');
        }

答案 4 :(得分:0)

如果你对任何文字进行任何算术运算,那么它将成为一个int,所以:

  • ch + 32ch - 32都是int,您无法将这些int值分配给您尝试在代码中执行的字符ch

所以你需要将这个int值类型化为char,如:

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