这是我为转换字符串大小写的程序。但是我收到了编译错误,因为我在以下程序中发表了评论。你能否在我的代码背景下向我解释一下,我做错了什么?
public class Togg
{
public static void main(String args[])
{
String small="nayanjindalrocks";
char a[]=new char[small.length()];
int i;
for(i=0;i<a.length;i++)
{
a[i]=small.charAt(i);
if(a[i]>='A'&&a[i]<='Z')
{
a[i]=a[i]+32; // Type mismatch: cannot convert from int to char (Add cast to char)
}
else
{
a[i]=a[i]-32; // Type mismatch: cannot convert from int to char (Add cast to char)
}
}
String news=new String(a);
System.out.print(news);
}
}
答案 0 :(得分:1)
正如编译器所说,您尝试将int
值(例如a[i] + 32
的结果)分配给char
变量(a[i]
)。“令人惊讶的是“此处的部分内容是a[i] + 32
的结果是char
...但如果您不查看JLS 15.18.2,则会感到惊讶,+
指定了a[i]
数字类型的运算符,它指定首先应用binary numeric promotion。在这种情况下,int
在执行添加之前隐式提升为a[i] = (char) (a[i] + 32);
。
选项:
添加演员阵容,例如
+=
使用隐式执行投射的-=
或a[i] += 32;
if (a[i] >= 'A' && a[i] <= 'Z') {
a[i] = **(char)** (a[i] + 32); // Type mismatch: cannot convert from int to
// char (Add cast to char)
} else {
a[i] = **(char)** (a[i] - 32); // Type mismatch: cannot convert from int to
// char (Add cast to char)
}
答案 1 :(得分:1)
{{1}}
这里你要向a [i]添加整数值,在内部将它转换为整数,这就是为什么你得到编译类型不匹配错误。您已明确将其强制转换为char。