Java String Program

问题描述 投票:0回答:4

我正在尝试使用BufferedReader编写String程序,在该程序中,您从用户那里获取String并更改字母的大小写。这是到目前为止我得到的:

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

[当我运行它时,它说“可能会丢失精度;必填字符;发现整数”有人可以帮我纠正这个问题吗?

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

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”。

java bufferedreader
4个回答
3
投票
char d= c-32;

c-32表达式的结果为int(因为32将被视为int),并且您试图将int值分配给char类型,因此这就是为什么“可能丢失精度误差”。您需要将32显式转换为char(或)将整个表达式右侧转换为char

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


2
投票
char d = (char) (c-32); // note the parentheses
char d = (char) (c+32); // around (char + int); see below
  • 32int文字。由(char + int)算术得出的表达式也属于int类型。由于char的范围是int的子集,因此编译器抱怨潜在的精度损失。通过显式转换为(char),可以有效地告诉编译器您知道自己在做什么。

  • 注意,括号在算术表达式(c+32)周围。没有它,编译器会将其评估为(char)(c) + 32,由于强制转换的优先级更高,因此再次导致int


0
投票

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


0
投票

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

让我们说c ='A',所以65

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

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

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

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

c=str.charAt(a);
if(Character.isUpperCase(c)){
     char d=Character.toLowerCase(c);
}

© www.soinside.com 2019 - 2024. All rights reserved.