有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的代码在以下条件下返回false?

我正在写代码。com练习。我对此练习有问题: 如果字符串中的所有“x”字符后面都有一个“y”字符,那么我们就说字符串是xy平衡的。所以“xxy”是平衡的,但“xyx”不是。一个“y”可以平衡多个“x”。如果给定字符串是xy平衡的,则返回true

xyBalance("aaxbby") → true
xyBalance("aaxbb") → false
xyBalance("yaaxbb") → false

我知道正确的解决方案,但我很好奇为什么以下解决方案不起作用:

public boolean xyBalance(String str) {
  for(int i = 0; i < str.length() -1 ;i++) {
    if(str.indexOf("x") == -1 ) {
       return true;
    }
    else if(str.charAt(str.length()-1) == 'x') {
      return false;
    }
     else if (str.indexOf("x",i) < str.indexOf("y",i)) {
      return true; 
    }
  }
  return false; 
}

此代码适用于除两种示例情况外的所有情况:

xyBalance("y") → true  **my code returns false**

xyBalance("") → true    **my code returns false** 

有人能解释一下原因吗?谢谢你=]


共 (2) 个答案

  1. # 1 楼答案

    对于字符串"y",您得到错误结果的原因是for循环中的条件是运行到i < str.length() -1,修复程序会将该条件更改为运行到:i < str.length(),这样您就不会错过最后一个字符

    至于在空字符串上运行代码,由于字符串的长度为零,它根本不会进入for循环,因此将返回false-因此这实际上是一个好结果

  2. # 2 楼答案

    如果传递的String为空,则不会进入循环,因此该方法会自动返回false。循环以i = 0开始,尝试匹配条件i < str.length() - 1,其中str.length() - 1的值为-1,因为String为空并自动中止

    无论如何,这段代码都浪费了相当多的计算能力。有一个简单得多的解决方案:

    这个问题可以转化为

    A String is balanced, if no 'x' occurs after the last 'y' in the String

    这使得整个问题变得简单得多:

    public boolean xyBalanced(String s){
        return s.lastIndexOf('x') <= s.lastIndexOf('y');
    }