在不使用内置函数的情况下转换为char而使用toggline字符串大小写

时间:2015-09-25 10:19:52

标签: java

这是我为转换字符串大小写的程序。但是我收到了编译错误,因为我在以下程序中发表了评论。你能否在我的代码背景下向我解释一下,我做错了什么?

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);
}
}

2 个答案:

答案 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。