在stringbuffer对象中交换字符时出错

kiz8lqtg  于 2021-07-03  发布在  Java
关注(0)|答案(4)|浏览(207)

我正在尝试按字母顺序对字符串排序,但是在行中遇到了一个错误:

sb.charAt(j)=sb.charAt(j+1);

编译器将错误显示为 expected variable; found value 其余代码如下:

import java.util.Scanner;
class a
{
 public static void main(String[] agrs)
{
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    StringBuffer sb = new StringBuffer();
    sb.append(s);
    for(int i = 0; i< s.length(); i++)
    {
        for(int j = 0; j<s.length(); j++)
        {
            if(s.charAt(j)>s.charAt(j+1)){
            char temp = s.charAt(j);
            sb.charAt(j)=sb.charAt(j+1);
            sb.charAt(j+1)=temp;
        }
    }
}}}

请帮助我,因为我是一个初学者,我不知道为什么会发生这个问题,谢谢。

fbcarpbf

fbcarpbf1#

这看起来像是一个家庭作业,其目标是对输入的文本中的字符进行排序,因此如果您输入 gfedbca 结果应该是 defg .
您已经收到一条评论,告诉您问题所在: StringBuffer#charAt() 不返回对stringbuffer的内部数组的引用,您可以更改该数组的值。根据实际分配,您可以调用stringbuffers setCharAt 方法,或者您可以使用另一种方法,将要排序的文本转换为char数组并在其中进行排序。实际上,jvm中有帮助程序类,它们为您提供帮助,请看一看类 java.util.Arrays

bqucvtff

bqucvtff2#

字符串缓冲区 charAt 只返回 char 在索引处,如果要交换两个字符,则需要使用setter,因此可能需要执行以下操作:

for(int j = 0; j < s.length() - 1; j++) {
    if(s.charAt(j) > s.charAt(j + 1)) {
        char temp = s.charAt(j);
        sb.setCharAt(j, sb.charAt(j + 1));
        sb.setCharAt(j + 1, temp);
    }
}
ghhkc1vu

ghhkc1vu3#

正如许多人已经回答的那样,这个问题正在解决 charAt(index) 您正在使用,因为这将返回给定索引处的字符,而不是在索引位置设置字符。我的回答是改变你的分类方法。对于更简单的解决方案,如果使用较小的数据集(如您的问题),则应使用预定义的排序算法(如插入排序),您可以从以下位置获得算法的帮助:http://www.geeksforgeeks.org/insertion-sort/

vfwfrxfs

vfwfrxfs4#

此方法只能返回值,不能设置值,我猜您可能要使用此方法:

setCharAt()

它能满足你的要求

相关问题