不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助

Posted

技术标签:

【中文标题】不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助【英文标题】:incompatible types: bad type in conditional expression void cannot be converted to Boolean. please assist 【发布时间】:2021-09-11 15:33:26 【问题描述】:

下面是我的代码.....

我正在尝试使用 " (...)? IntStream.range(...).forEach(i->......):false;

公共类 CheckAnagram

boolean status=false;
int countForStr1=0;
int countForStr2=0;
String str1ToLowerCase,str2ToLowerCase;
public boolean isAnagram(String str1, String str2)
   
    str1ToLowerCase=str1.toLowerCase().trim();
    str2ToLowerCase=str2.toLowerCase().trim();
    
    status = (str1ToLowerCase.length()==str2ToLowerCase.length())?
            IntStream.range(0, str1ToLowerCase.length()).forEach(i->
                 char tempChar=str1ToLowerCase.charAt(i);
                 IntStream.range(0, str1ToLowerCase.length()).forEach(j->
                     if(str1ToLowerCase.charAt(j)==tempChar)
                    countForStr1++;
                if(str2ToLowerCase.charAt(j)==tempChar)
                    countForStr2++;
                 );        
            ): false;
      

【问题讨论】:

代码基本上是(someCondition) ? IntStream.range(...).forEach(i->...) : falseforEach不返回任何东西/返回void 哦,所以我必须在 forEach 方法中返回一些东西? 你不能从那个方法返回任何东西,它是一个流终止方法,不能改变。相反,您应该删除整个三元内联 if 而是编写一个更具可读性和表现力的 if (someCondition) IntStream stuff; status = true; else status = false; 【参考方案1】:

在声明中

status = (str1ToLowerCase.length()==str2ToLowerCase.length())?

如果条件为真,则需要为 status 赋值,然而

IntStream.range(0, str1ToLowerCase.length()).forEach(i->
                 char tempChar=str1ToLowerCase.charAt(i);
                 IntStream.range(0, str1ToLowerCase.length()).forEach(j->
                     if(str1ToLowerCase.charAt(j)==tempChar)
                    countForStr1++;
                if(str2ToLowerCase.charAt(j)==tempChar)
                    countForStr2++;
                 );        
            )

这段代码不会返回任何东西,它只是执行一些操作。这里没有什么可以退回的。 For each 不会返回任何东西,所以你得到 void 并且代码然后将 void 分配给一个变量。你可以试试这样的:

status = str1ToLowerCase.length() == str2ToLowerCase.length();
        if (status)             
            IntStream.range(0, str1ToLowerCase.length()).forEach(i -> 
                char tempChar = str1ToLowerCase.charAt(i);
                IntStream.range(0, str1ToLowerCase.length()).forEach(j -> 
                    if (str1ToLowerCase.charAt(j) == tempChar)
                        countForStr1++;
                    if (str2ToLowerCase.charAt(j) == tempChar)
                        countForStr2++;
                );
            );
        

【讨论】:

以上是关于不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助的主要内容,如果未能解决你的问题,请参考以下文章

与 void* 类型不兼容的类型

“void(*)(int wall)”类型的 C++ 参数与“int”类型的参数不兼容

错误“条件表达式中的数据类型不匹配”

ms 访问 2007 更新错误运行时错误 3464,条件表达式中的数据类型不匹配

运行时错误 3464:条件表达式中的数据类型不匹配

错误:条件表达式中的数据类型不匹配