0

I have to write a program to input a String str and change the upper case to lower case and vice versa. For example:

input: "abCD"

output: "ABcd"

this is what I've got:

l-is the length of the string

for(int b=0;b < l;b++)

             {

               char let=str.charAt(b);

               if(let>97 && let<122)

               {char nlet=let-32;

               System.out.print(nlet);

            }
            else if(let>65 && let<90)
             { char t=let+32;
              System.out.print(t);
            }
           }
           break; 
        }

the error coming for this line:"char nlet=let-32;" is: required:char;found:int;

how do i fix this?

4

4 回答 4

5

问题是它32是一个整数,并且let是一个字符。letJava会在遇到时将值隐式转换为int let-32,结果是int值(对于'a')96或其他。

您需要将结果转换回 char:

(char)(let+32)
于 2013-05-22T11:08:24.277 回答
3

尝试使用以下更新的 for 循环:

 for(int b=0;b < l;b++)

             {

               char let=str.charAt(b);

               if (Character.isLowerCase(let))
               {
                   char nlet=Character.toUpperCase(let);

               System.out.print(nlet);

              } else if(Character.isUpperCase(let))
             { char t=Character.toLowerCase(let);
              System.out.print(t);
            }
           }
           break; 
        }
于 2013-05-22T11:09:40.020 回答
1

如果没有任何其他类(比如 Character 显然你不能使用它),你需要转换成 char :

for(int b=0;b < l;b++)
{
    char let=str.charAt(b);

    if(let>97 && let<122)
    {
        char nlet=(char) let-32;
        System.out.print(nlet);
    }
    else if(let>65 && let<90)
    {
        char t=(char)let+32;
        System.out.print(t);
    }
}

你的编译器在这里告诉你答案:

required:char;found:int

这意味着你的操作,这里是变量赋值有一个错误的参数。当你有

 char nlet = xxx

编译器期望xxx可以转换为char. 在这里你用or给它一个int值。所以在这里你需要转换或使用一个从;输出 a 的函数。这就是你看到这里所有的人告诉你使用为你提供所有帮助函数来完成作业的类(这也比手动添加/订阅 32 更好)let-32let+32charcharintCharacter

小心,有时你会看到类似String str = "A string from int: " + 2000 这意味着你的编译器会自动2000转换成"2000",因为+a 的操作String需要 2 个字符串参数。

于 2013-05-22T11:12:01.930 回答
0

问题在于您的let-32;它将返回一个整数,因此您需要将其隐式转换为 char 变量。

将您的代码更改为char nlet=(char) (let-32);

此外,您的 if 条件还有一个问题,您的程序不会给出正确的输出,因为您没有检查字母“a”和“z”。更改您的 if -else 以检查边界条件。

if(let>=97 && let<=122)
{
}else (let>=65 && let<=90){ 
}
于 2013-05-22T11:18:50.043 回答