Java 如何在不使用哈希映射的情况下对字符串中的字符重新排序?

Java 如何在不使用哈希映射的情况下对字符串中的字符重新排序?,java,string,parsing,character,Java,String,Parsing,Character,我下面的代码给出了以下错误,我不知道为什么。我正在尝试按以下顺序重新排列输入的单词(“例如,波兰语”): (第一个字母、最后一个字母、第二个字母、最后第二个字母、第三个字母…依此类推)因此输出应为“Phosli” 更新代码 public static String encodeTheWord(String word1) { int b = 0; int e = word1.length()-1; String word2 = ""; for (int i=

我下面的代码给出了以下错误,我不知道为什么。我正在尝试按以下顺序重新排列输入的单词(“例如,波兰语”):

(第一个字母、最后一个字母、第二个字母、最后第二个字母、第三个字母…依此类推)因此输出应为“Phosli

更新代码

public static String encodeTheWord(String word1)
{
    int b = 0;
    int e = word1.length()-1;
    String word2 = "";   
    for (int i=0; i<e; i++)
    {
        word2 = word2 + word1.charAt(b) + word1.charAt(e);
        b+=1;
        e-=1;
    }

    System.out.println(word2);

    return (word2);
}
publicstaticstringencodetheword(stringword1)
{
int b=0;
int e=word1.length()-1;
字符串word2=“”;

for(int i=0;i您的for循环是错误的,您可以在索引0处获得一个字符,直到word1.length()-1

一定是

for (int i=0; i<word1.length()-1; i++)

因为您将e定义为word1.length()

用于字符数为偶数的单词(波兰语),字符的顺序变为
051423
,因此
b
的最大值是
2
,最小值是
e
,从
5
3
。因此,循环应该减小
e
并增加
b
两次(因此您运行循环的
word1.length()/2次).此外

int e=word1.length();

需要:

int e=word1.length()-1;


对于长度不均匀的单词(
word1.length()%2>0
),您需要额外检查,否则将重复中间的字符。

这同样适用于:word1.charAt(e);e必须是word1.length()-1您是对的,第一种解决方案只适用于“抛光”和其他偶数单词。但是“水”作为wrae发布。我现在试试你的解决方案,看看结果如何。很抱歉,我无法让你的解决方案发挥作用。你能详细说明一下吗?我会发布我的更新代码(只适用于不规则的单词)在这个问题中!您的循环终止条件
i
可能是偶然工作的,但是使用在那里的循环中更改的变量是不好的做法。相反,您可能需要
word1.length()/2
。请注意,这使用整数除法,因此如果单词长度为7,那么这将是
i<3
,并且它将运行
i=0,1,2
。在这种(不均匀)情况下,您将丢失中间字母,因此在循环之后添加一个额外的
if
-语句:
if(word1.length()%2>0)word2=word2+word1.charAt(b)
。请不要发布文本截图,只发布文本本身。对不起,我会记住这一点
word1.charAt(e);