我编写了下面的代码,将小写转换为大写,将大写转换为小写,但它运行不正常。此代码触发以下错误:
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 != '.');
}
}
答案 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 + 32
和ch - 32
都是int,您无法将这些int值分配给您尝试在代码中执行的字符ch
。所以你需要将这个int值类型化为char,如:
ch = (char)(ch + 32)
和ch = (char)(ch - 32)