【问题标题】:What is wrong with my code of reversing each word of a given string in java? [closed]我在java中反转给定字符串的每个单词的代码有什么问题? [关闭]
【发布时间】:2018-06-13 06:34:37
【问题描述】:

提交后它说答案是错误的,请告诉我其中的逻辑错误是什么,而不是格式或其他方法。

public class Solution {
  public static String reverse(String s1){
    int i=s1.length()-1;
    String s2="";
    while(i>=0){
        s2=s2+s1.charAt(i--);     
    }
    s2=s2+' ';
    return s2;
  }
    // Return the reversed string. No need to print

  public static String reverseEachWord(String s1) {
      s1=s1+"";
    String s2="";
    int i=0;
    char ch;
    String temp="";
    while(i<s1.length()){
      ch=s1.charAt(i);
      if(ch!=' '){
        temp=temp+ch;
        i++;  
      }
      else{
        temp=reverse(temp);
        s2=s2+temp;
        temp="";
        i++;
      }
    }
    return s2;  
    }
}

【问题讨论】:

  • 我在java中反转给定字符串的每个单词的代码有什么问题?给我们一个提示怎么样?也许是因为你的代码格式很糟糕?
  • 有什么问题?为什么?你期待什么?反而发生了什么?有什么错误吗?如果是,请发布堆栈跟踪。
  • 结果字符串为空
  • 您正在将字符串s1 的每个单词收集到temp 中;一旦你在temp 中找到了一个完整的单词,你就可以反转something 并将反转的something 附加到s2。但我认为你扭转了错误的某事...
  • int j = 0; 在第一种方法中没有做任何事情。对于第二种方法,最简单的实现是调用s1.Split(' ') 来获取单词数组,然后将第一种方法应用于每个单词并将所有内容重新组合在一起。

标签: java string reverse


【解决方案1】:

很抱歉,但我发现了很多问题。

  • 首先,我建议你下次使用StringBuilder 经常操作字符串。

  • 其次,如果 s1 是一个单词而不是像 s1 = "question" 这样的句子,在您的情况下,它将存储在 temp 中并且您的 while 循环结束。 s2 仍然是空的,你得到了错误的答案。还有,如果s1是一个多词的句子,最后一个词也会出现上面提到的问题。

  • 这行有一个错误temp = reverse(s2);你的s2一开始是空的,它会一直这样。我想你想写temp = reverse(temp);

顺便说一句,我没有运行你的代码,现在我只在你的代码中遇到了这些问题。

【讨论】:

  • 我想这样做,是的,这是错误 temp = reverse(s2);但即使答案仍然是错误的
  • 前两个问题你解决了吗?
  • 请再读一遍。
【解决方案2】:

您的 reverseWord 函数有一些逻辑错误,请将您的函数更新为: 改变

s1 = s1 +"";

s1 = s1 + " ";

因为你需要连接空间。

如果您可以使用可以进一步简化代码的 while 循环而不是。

public static String reverseEachWord(String s1) {

    s1 = s1 + " ";
    String s2 = "";
    int i = 0;
    char ch;
    String temp = "";
    while (i < s1.length()) {

        while (s1.charAt(i) != ' ') {
            temp = temp + s1.charAt(i);
            i++;
        } 
        temp = reverse(temp);
        s2 = s2 + temp;
        temp = "";
        i++;

    }

    return s2;

}

【讨论】:

  • 显示运行时错误
  • @vss 工作正常。请看:ide.geeksforgeeks.org/UwMN7p1dVB
  • 是的,谢谢。你能告诉我我的while循环中的逻辑错误是什么吗?
  • @vss 基本上是行 temp = reverse(s2);和 s1=s1+"" ;是意外行为的根本原因。 :-)
  • 是的,但我更改了 temp=reverse(temp) 仍然是错误的,但我不明白为什么
【解决方案3】:

还有很多其他方法可以做到这一点。但是如果你想改变你的代码,那么这里就是

public static String reverseEachWord(String s1) {

        s1 = s1 + " ";
        String s2 = "";
        int i = 0;
        char ch;
        String temp = "";
        while (i < s1.length()) {
            ch = s1.charAt(i);
            if (ch != ' ') {
                temp = temp + ch;
                i++;
            } else {
                temp = reverse(temp);
                s2 = s2 + temp;
                temp = "";
                i++;
            }

        }

        return s2;

    }

从 temp = reverse(s2); to temp = reverse(temp);

【讨论】:

  • 做了,还是答错了
猜你喜欢
  • 2021-04-08
  • 2021-04-28
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多