繁体   English   中英

转换为三元运算符时条件改变行为?

[英]conditional changes behavior when converted to ternary operator?

我正在编写一个 function 比较字符串前半部分的元音数量并将其与后半部分进行比较,并根据数字是否相等返回 boolean。

例子:

Input: "book"
Output: true

因为bo | ok bo | oknumVowels = 1 ,两半都有一个 'o'。

我的有效代码在这里

class Solution {
    public boolean halvesAreAlike(String s) {
        Set<Character> set = new HashSet<>(Arrays.asList('a','e','i','o','u','A','E','I','O','U'));                                
        int vowelCount = 0, length = (s.length()%2 == 0) ? s.length()/2 : s.length()/2+1;
        
        boolean pastHalf = false; 
        for (int i = 0; i < s.length(); i++) {
            if (i == length) pastHalf = true; 
            if (pastHalf && set.contains(s.charAt(i))) vowelCount--; 
            else if (!pastHalf && set.contains(s.charAt(i))) vowelCount++; 
        }
        return vowelCount == 0;                                                                    
    }
}

if (i == length) pastHalf = true; 行,我正在检查我是否击中了字符串的中间。 这是一个简单的 boolean。 我把它改成了这个三元pastHalf = (i == length)? true: false; pastHalf = (i == length)? true: false; 并且 output 对于测试用例Ieai是错误的。 有谁知道为什么? 我相信这些陈述是等价的。

if (i == length) pastHalf = true;

绝对不一样

pastHalf = (i == length) ? true : false

在第一种情况下,仅当i完全等于length时才更改pastHalf ,因此当您迭代超过length时, pastHalf保持为true

第二,在每次迭代中, pastHalf被重置,所以只有当i完全等于length时, pastHalf为真。

其他改进:

length = (s.length()+1) % 2;  // Think about this one carefully

if (set.contains(s.charAt(i))) 
    vowelCount += pastHalf ? -1 : +1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM