【问题标题】:programming logic of java programjava程序的编程逻辑
【发布时间】:2014-07-23 07:26:29
【问题描述】:

我需要在java中创建一个程序,当输入时说:

hhllyyjhhh

输出应该是

h2l2y2j1h3 

相反,我得到了输出

h2l2y2j1  

我知道原因,但请告诉我我应该如何纠正它或者可能会告诉一个新的逻辑。

在下面的代码中T是字符数组,ans是一个空字符串。

        int counter=0;
        for(int i=0;i<T.length;i++)
            {
            for(int j=i;j<T.length;j++)
            { 
                if(T[i]==T[j])
                {
                    counter++;
                }
                else 
                {
                    ans=ans+T[i]+counter;
                    i=j-1;
                    counter=0;
                    break;
                }

【问题讨论】:

    标签: java logic


    【解决方案1】:

    问题是如果您的计数一直匹配,您不会添加最后一个字符,我建议您稍微改变您的方法并尝试在附加字符和计数之前向前扫描(基本上将您的 else 移到内部循环之外) -

    char[] T = "hhllyyjhhh".toCharArray();
    String ans = "";
    for (int i = 0; i < T.length; i++) {
      int count = 1;
      while (i + count < T.length && T[i + count] == T[i]) {
        count++;
      }
      ans += T[i] + String.valueOf(count);
      i += count - 1;
    }
    System.out.println(ans);
    

    在此处生成您请求的输出。

    【讨论】:

      【解决方案2】:

      for loops 之后,您需要将最后一个字符值附加到ans,因为目前它正在被跳过。

      if(counter>0) {
          ans=ans+T[T.length-1]+counter
      }
      

      或者你可以只使用一个 for 循环,如下所示:

          char[] T = "hhllyyjhhh".toCharArray();
      
          int counter = 1;
          StringBuilder out = new StringBuilder();
          for(int i=0;i<T.length-1;i++) {
              if(T[i]==T[i+1]) {
                  counter++;
              } else {
                  out.append(T[i]).append(counter);
                  counter=1;
              }
          }
      
          if(counter>0) {
              out.append(T[T.length-1]).append(counter);
          }
          System.out.println(out.toString());
      

      【讨论】:

        【解决方案3】:

        检查下面的代码。 cmets正在解释逻辑。

        public static void main(String[] args) {
            // invoking our method        
            System.out.println(getCompressedString("hhllyyjhhh"));
        }
        
        
        private static String getCompressedString(String rawString) {
        
            final StringBuffer sb = new StringBuffer();
            final char[] rawStringChars = rawString.toCharArray();
        
            // the first symbol
            int counter = 1;
            char processingChar = rawStringChars[0];
        
            // processing the rest of string symbols
            for (int i = 1; i < rawStringChars.length; i++) {
                // if there's another symbol
                if (processingChar != rawStringChars[i]) {
                    sb.append(processingChar);
                    sb.append(counter);
        
                    // setting new processing char and new counter
                    processingChar = rawStringChars[i];
                    counter = 1;
                } else {
                    // if there's the same symbol
                    counter ++;
                }
            }
        
            // writing "tail" part
            sb.append(processingChar);
            sb.append(counter);
        
        
            return sb.toString();
        }
        

        【讨论】:

          【解决方案4】:

          您需要在 for 循环之外附加最后一个字符及其计数,因为 else 部分不处理最后一个字符的附加。在这里,我调整了您的代码以获得所需的结果。

          public static void main(String[] args) {
              char T[] = { 'h', 'h', 'l', 'l', 'y', 'y', 'j', 'h', 'h', 'l', 'a' };
              String ans = "";
              int counter = 0;
              int j = 0;
              for (int i = 0; i < T.length; i++) {
                  if (j == T.length - 1) {
                      if (T[i] != T[j - 1]) {
                          counter = 1;
                      }
                      break;
                  }
                  for (j = i; j < T.length; j++) {
                      if (T[i] == T[j]) {
                          counter++;
                          if (j == T.length - 1) {
                              break;
                          }
                      } else {
                          ans = ans + T[i] + counter;
                          i = j - 1;
                          counter = 0;
                          break;
                      }
                  }
              }
              if (counter > 0) {
                  ans = ans + T[T.length - 1] + counter;
              }
              System.out.println(ans);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多