【问题标题】:How do I reorder characters in a String without the use of Hashmaps?如何在不使用哈希图的情况下对字符串中的字符进行重新排序?
【发布时间】:2017-02-25 22:14:12
【问题描述】:

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

(第一个字母、最后一个字母、第二个字母、倒数第二个字母、第三个字母……等等)所以输出应该是“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);
}

【问题讨论】:

  • 请不要发文字截图;只需发布文本本身。
  • 我会记住的,对不起

标签: java string parsing character


【解决方案1】:

对于偶数个字符的单词(波兰语),字符顺序变为051423,因此b的最大值为2,最小值为e来自@987654325 @到3。因此,您的循环应该减少e 并增加b 两次(因此您运行循环word1.length() / 2 次)。还有,

int e = word1.length();

需要:

int e = word1.length() - 1;

对于长度不等的单词 (word1.length() % 2 &gt; 0),您需要进行额外检查,否则您将重复中间字符。

【讨论】:

  • 你是对的,第一个解决方案仅适用于“抛光”和其他偶数词。但“水”以 rae 的形式出现。我现在试试你的解决方案,看看结果如何
  • 很抱歉,我无法让您的解决方案发挥作用。你能详细说明一下吗?在问题中发布我更新的代码(仅适用于不均匀的单词)!
  • 您的循环终止条件i &lt; e 可能会意外起作用,但使用在循环内更改的变量是不好的做法。相反,您可能想要word1.length() / 2。请注意,这使用整数除法,因此如果字长为 7,那么这将是 i &lt; 3,它将运行 i = 0, 1, 2。在这种(不均匀)情况下,您会错过中间字母,因此在循环后添加一个额外的if-statement:if (word1.length() % 2 &gt; 0) word2 = word2 + word1.charAt(b);
【解决方案2】:

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

必须

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

这同样适用...

word1.charAt(e);

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

【讨论】:

  • 这同样适用:word1.charAt(e);, e 必须是 word1.length()-1
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2011-07-19
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
相关资源
最近更新 更多