【问题标题】:Last element of JAVA char array is not replacedJAVA char数组的最后一个元素没有被替换
【发布时间】:2014-05-23 10:43:31
【问题描述】:

在 JAVA 'char[] a' 中,我想用 'q' 替换所有字符,但 'x' 和 'y' 除外。我通过下面的 JAVA 代码进行了尝试。它可以工作,但无法替换最后一个字符。我需要帮助来完成更换。

public static void main( String[] args )
{
       char[] a ={'x','y','z','x','y','r','b'};

       for(int i=0; i<a.length; i++){

        if ( a[i]=='x') {
                i=i+1;
            if ( a[i]=='y') {
                   i=i+1;
                   a[i]='q';
            } 
                System.out.println(a);
         }
    }
}

【问题讨论】:

  • 您的代码'只会将'x''y'之后的每个第一个字符直接更改为'q'。根据这些规则,您的最后一个字符未验证为 true
  • 你甚至不应该操纵你的循环计数器。我认为有问题。
  • 这如何工作?该代码不符合您的描述。代码的作用如下:“对于所有x 后跟y,将以下字符替换为q

标签: java arrays replace char


【解决方案1】:

将你的 for 中的所有内容替换为:

if ( a[i] != 'x' && a[i] != 'y' ){ a[i] = 'q'; }

【讨论】:

    【解决方案2】:

    我不会检查你的代码,但我会告诉你如何实现你的目标。

      char[] a = {'x', 'y', 'z', 'x', 'y', 'r', 'b'};
      for (int i = 0; i < a.length; i++) {
        if (a[i] == 'x' || a[i] == 'y') {
          continue;
        } else {
          a[i] = 'q';
        }
      }
      System.out.println(a);
    

    java 中的关键字 continue 会跳过实际的迭代并进入下一个迭代。

    【讨论】:

      【解决方案3】:

      您需要检查当前字符(位于索引i)是否不是xy。如果它是其中一个字符,则 for 循环照常继续并检查下一个字符。

      for(int i = 0; i < a.length; i++){
         char c = a[i]; //get current char
         if(c != 'x' && c != 'y'){ //check if it is a x or y
            a[i] = 'q' //replace current char
         }
      }
      

      【讨论】:

      • 您提供的代码已经给出了需要的结果。但是作为编程新手,我仍然对我的代码版本失败的原因感到困惑。你能提示一下它的失败吗?
      • 为什么是char c = a[i];
      • @Braffdev:请为您的 hopw 解决方案添加一些解释,它解决了问题以及 OP 缺少什么或出错了。
      • @Absurd-Mind - 为清楚起见
      【解决方案4】:

      循环中的代码只会用q 替换序列x, y 之后的任何字符。替换除xy 之外的所有字符的一种方法是将循环更改为:

      for(int i=0; i<a.length; i++){
      
          if ( a[i]!='x' && a[i] != 'y') {
             a[i]='q';
          } 
      }
      
      System.out.println(a);
      

      另请注意,您的System.out.println 似乎位于错误的位置,不会输出任何有用的信息。

      【讨论】:

        【解决方案5】:

        正如 Jens 指出的,永远不要修改循环计数器。 Java 不关心这个,但你可以。因此,假设我们处于第一次迭代中:

            int i = 0;
        
            if ( a[i]=='x') { // i is still 0
                    i=i+1;    // i becomes 1
                if ( a[i]=='y') { // OOPS, i is 1 here. so this is a[1] and therefore 'y'
                       i=i+1;
                       a[i]='q';
                } 
                    System.out.println(a);
             }
        

        for 循环中,您可以使用continue; 跳过循环的其余部分并跳转到下一个迭代。

        请记住,for 的退出条件仅被评估一次:在 for 块的开头。

        【讨论】:

          【解决方案6】:

          肯定不是:

          if (a[i] == 'x'){i=i+1;
          if (a[i] == 'y'){i=i+1;
          a[i] = 'q';
          }
          System.out.println(a);
          }
          

          你可以这样做:

          if (a[i] != 'x' || a[i] != 'y'){
             a[i] = q;
          System.out.println(a);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-03
            • 2021-08-14
            • 1970-01-01
            • 1970-01-01
            • 2017-06-28
            • 2011-04-07
            相关资源
            最近更新 更多