在stringbuffer对象

时间:2017-09-04 08:25:15

标签: java stringbuffer

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

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

请帮助我,因为我是初学者,我无法弄清楚为什么会出现这个问题,谢谢。

4 个答案:

答案 0 :(得分:1)

这看起来像是一项家庭作业,其目标是对输入的文字的字符进行排序,因此如果您输入gfedbca,结果应为abcdefg

您已经有一条评论告诉您问题所在:StringBuffer#charAt()没有返回对StringBuffer内部数组的引用,您可以更改其值。根据实际的赋值,你可以调用StringBuffers setCharAt方法,或者你可以通过将文本转换为char数组并在那里进行排序来采用另一种方法。在JVM中实际上有帮助类,为你做这些,看看,例如在class java.util.Arrays

答案 1 :(得分:0)

StringBuffer&#39; s charAt只返回索引处char的值,如果你想交换两个字符,你需要使用setter,这样你就可以想做somtehing像:

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

答案 2 :(得分:0)

此方法可以仅返回值并且不能设置值,我猜您可能想要使用此方法:

setCharAt()

它可以满足您的要求

答案 3 :(得分:0)

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