0

我正在尝试使用 BufferedReader 执行字符串程序,您可以在其中从用户那里获取字符串并更改字母的大小写。这是我到目前为止所得到的:

import java.io.*;
public class StringProg {
    public void ff()throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a sentence");
        String str=br.readLine();
        String s="";
        int l=str.length();
        char c;
        for(int a = 1; a < l; a++) {
            c = str.charAt(a);
            char d = 0;
            if(c >= 97 && c <= 122) {
                d = c - 32;
            } else if(c >= 65 && c <= 90) {
                d = c + 32;
            }
         System.out.print(d);
        }
    }
}

当我运行它时,它说“可能失去精度;需要的字符;找到 int”有人可以帮我纠正这个问题吗?

更新:这是更正后的新代码:

import java.io.*;
 public class StringProg
  {
    public void ff()throws IOException
   {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter a sentence");
    String str=br.readLine();
    String s="";
    int l=str.length();
    char c;
    char d;
    for(int a=1;a<l;a++)
    {
        c=str.charAt(a);
        if(c>=97 && c<=122)
        {
             d= (char)(c-32);
        }
        else if(c>=65 &&c<=90);
        {
            d=(char)(c+32);
        }
     System.out.print(d);
    }
    }
}

但输出不起作用。有人能指出我的错误吗?当我输入“a”或“b”时,没有输出,但当我输入“E”时,它变为“e”,但当我输入“HidE”时,它变为2个正方形(我不知道如何打印它在键盘上)和“e”。

4

4 回答 4

3
char d= c-32;

c-32表达式导致int(因为 32 将被视为int)并且您正在尝试将int值分配给 char 类型,这就是您得到“可能丢失精度错误”的原因。您需要将右侧的整个表达式显式32转换为(或)整个表达式。charchar

相同的规则也适用于char d=c+32;语句以及您使用 char 类型的 int 值的其他地方。

于 2013-06-24T14:48:34.747 回答
2
char d = (char) (c-32); // note the parentheses
char d = (char) (c+32); // around (char + int); see below
  • 32int文字。char( + int) 算术产生的表达式也是类型int。由于 a 的范围char是 的子集int,因此编译器会抱怨精度的潜在损失。通过显式转换为(char),您实际上是在告诉编译器您知道自己在做什么。

  • 请注意,算术表达式周围的括号(c+32)。没有它,编译器会评估它,因为(char)(c) + 32它具有int更高的强制转换优先级。

于 2013-06-24T14:51:27.697 回答
0

进行计算后,只需将其转换回字符即可。例如, char d = (char)(c - 32). 它基本上只是希望您澄清并让程序知道您希望它来回转换。

于 2013-06-24T14:48:53.263 回答
0

发生这种情况是因为当您将一个 int 添加到一个字符时,它变成一个 int,然后您尝试(隐式)将该 int 转换回 char 并且int可能不“适合”char,因此您会收到错误

假设 c='A',所以 65

char d= c+32
char d= 65+32
char d= 97;

现在 97 可能对应于一个有效字符,但我们无法知道在编译时(原则上它可以是任何整数),如果intchar 太大或太小而无法放入 char 中,那么它的一部分将被丢弃;因此警告。您可以将其转换为 (char) 表示您接受,但整个过程并不好。

char d= (char)(c+32);

所有这些看起来就像它检查大小写并设置为小写(反之亦然)。如果是这样; 不要那样做,它真的很不清楚,使用:

c=str.charAt(a);
if(Character.isUpperCase(c)){
     char d=Character.toLowerCase(c);
}
于 2013-06-24T14:52:31.827 回答