Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 交换stringbuffer对象中的字符时出错_Java_Stringbuffer - Fatal编程技术网

Java 交换stringbuffer对象中的字符时出错

Java 交换stringbuffer对象中的字符时出错,java,stringbuffer,Java,Stringbuffer,我正在尝试按字母顺序对字符串排序,但是我在行中遇到了一个错误: sb.charAt(j)=sb.charAt(j+1); 其中,编译器将错误显示为预期变量;找到的值 代码的其余部分如下: import java.util.Scanner; class a { public static void main(String[] agrs) { Scanner sc = new Scanner(System.in); String s = sc.next(); Strin

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

 sb.charAt(j)=sb.charAt(j+1);
其中,编译器将错误显示为
预期变量;找到的值

代码的其余部分如下:

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;
        }
    }
}}}
import java.util.Scanner;
甲级
{
公共静态void main(字符串[]agrs)
{
扫描仪sc=新的扫描仪(System.in);
字符串s=sc.next();
StringBuffer sb=新的StringBuffer();
某人追加;
对于(int i=0;i

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

StringBuffer的
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);
    }
}
for(int j=0;js.charAt(j+1)){
字符温度=s.charAt(j);
sb.setCharAt(j,sb.charAt(j+1));
sb.setCharAt(j+1,温度);
}
}

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


您已经收到一条注释,告诉您问题所在:
StringBuffer#charAt()
没有返回对StringBuffer的内部数组的引用,您可以更改该数组的值。根据实际分配情况,您可以调用StringBuffers
setCharAt
方法,也可以使用另一种方法,将文本转换为字符数组进行排序。JVM中实际上有帮助器类,可以为您这样做,请看一下,例如,在

中,此方法只能返回值,也可以不设置值,我想您可能想使用此方法:

setCharAt()

它可以满足您的要求

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

sb.charAt(j)是一个值,而不是可以指定的变量。
sb.charAt(j)
是一个getter。也许你的意思是说,某人
虽然这修复了OP的直接问题,但仍然会失败,因为“j+1”将超过
StringBuffer
实例
sb
的最大长度。请考虑把这个添加到你的答案中。好的,补充说,但是IHHO并不是和你最初的问题有关,但是这是为了避免OP认为你的解决方案是无效的,因为它仍然崩溃。对于外行来说,很容易假设您在解决问题方面没有取得任何进展。同时,这也是一个教需要学习的人的机会。