我正在尝试按字母顺序对字符串进行排序,但是我在行中遇到错误:
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;
}
}
}}}
请帮助我,因为我是初学者,我无法弄清楚为什么会出现这个问题,谢谢。
答案 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/